2017-03-01 70 views
2

我是新来的awk,一般壳相结合,一排。我要处理一些文件,并找到基于列awk中找到两个文件的公共行,行中的第三个文件

两个文件共同的行,并从文件1写行的组合和文件2行作为在文件3连胜。

我在网上查很多提出的解决方案,这给我带来了得到以下结果。 我使用的文件结构和命令如下。

file1.tab

name level regno dept sex 
john 900  123  csc  male 
debby 800  378  mth  male 
ken  800  234  csc  male 
sol  700  923  mth  female 
dare 900  273  phy  male 
olanna 800  283  csc  female 
olumba 400  245  phy  male 
petrus 800  284  mth  female 

file2.tab

regno grade 
234  A 
283  D 
123  A 
273  B 

我能得到file3.tab与此命令

awk 'NR==FNR{a[$1];next} $3 in a {print $0}' file2.tab file1.tab > file3.tab 

file3.tab

name level regno dept sex 
john 900  123  csc  male 
ken 800  234  csc  male 
dare  900  273  phy  male 
olanna  800  283  csc  female 

但我要的是文件1排与排file2的整个连接到它这样

name level regno dept sex regno grade 
john 900  123  csc  male 123 A 
ken 800  234  csc  male 234 A 
dare  900  273  phy  male 273 B 
olanna  800  283  csc  female 283 D 

其次,我也希望得到file3.tab这种格式

name level regno dept sex grade 
john 900  123  csc  male A 
debby 800  378  mth  male NA 
ken  800  234  csc  male A 
sol  700  923  mth  female NA 
dare 900  273  phy  male B 
olanna 800  283  csc  female D 
olumba 400  245  phy  male NA 
petrus 800  284  mth  female NA 

我用此命令

awk 'FNR==NR{a[$1]=$1;next}{print $0, "\t" (($3 in a)? a[$1]:"NA")}' file2.tab file1.tab > file3-2.tab 

但我得到的是这一点,从file2.tab成绩没有显示

name level regno dept sex 
john 900  123  csc  male 
debby 800  378  mth  male NA 
ken  800  234  csc  male 
sol  700  923  mth  female NA 
dare 900  273  phy  male 
olanna 800  283  csc  female 
olumba 400  245  phy  male NA 
petrus 800  284  mth  female NA 

所有文件都制表符分隔。 请帮我解决这些问题。

回答

2

您可以使用此awk命令来实现你的输出:

awk 'BEGIN{FS=OFS="\t"} NR==FNR{a[$1]=$2;next} { 
    print $0, ($3 in a ? a[$3] : "NA")}' file2.tab file1.tab 

name level regno dept sex  grade 
john 900 123 csc male A 
debby 800 378 mth male NA 
ken  800 234 csc male A 
sol  700 923 mth female NA 
dare 900 273 phy male B 
olanna 800 283 csc female D 
olumba 400 245 phy male NA 
petrus 800 284 mth female NA 
+0

谢谢anubhava的快速反应。我尝试了命令,但所有的级柱为“NA” – CEPHAS

+0

名水平REGNO部门性NA 约翰900 123 CSC男性NA 黛比800 378第m个男性NA 县800 234 CSC男性NA 溶胶700 923第m个女NA 敢900 273 phy男性不适用 olanna 800 283 csc女性不适用 olumba 400 245 phy男性不适用 petrus 800 284月女性不适用 – CEPHAS

+0

答案中显示的输出是预期输出之一。但是当我运行命令时,我得到的输出与您在答案中显示的输出不一样。所有成绩列条目均为“NA” – CEPHAS

相关问题