如何在不影响标题的情况下使用此awk命令

时间:2017-12-11 22:10:45

标签: bash unix awk dataset

好的nigt。我有这两个文件:

文件1 - 带有表型信息,第一列是Ids,orinal文件有400行:

ID  a b  c          d 
215 2 25 13.8354303 15.2841303
222 2 25.2 15.8507278 17.2994278
216 2 28.2 13.0482192 14.4969192
223 11 15.4 9.2714745 11.6494745

文件2 - 使用SNP信息,原始文件有400行,每行42,000个字符。

ID  t u j l
215 2 0 2 1 
222 2 0 1 1 
216 2 0 2 1 
223 2 0 2 2 
217 2 0 2 1 
218 0 2 0 2 

我需要从文件2中删除未出现在文件1中的个人,例如:

ID  t u j l
215 2 0 2 1 
222 2 0 1 1 
216 2 0 2 1 
223 2 0 2 2

我使用了这段代码:

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

我可以得到这个输出(文件3):

215 2 0 2 1 
222 2 0 1 1 
216 2 0 2 1 
223 2 0 2 2

但我失去了标题,我怎么不丢失标题?

1 个答案:

答案 0 :(得分:3)

要保留第二个文件的标头,请添加condition{action},如下所示:

awk 'NR==FNR {a[$1]; next}
     FNR==1  {print $0; next}  # <= this will print the header of file2.
     $1 in a {print $0}' file1 file2

NR保留总记录号,而FNR是文件记录号,它计算当前正在处理的文件的记录。 next语句也很重要,以便继续下一条记录,不要尝试其余的操作。