好的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
但我失去了标题,我怎么不丢失标题?
答案 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
语句也很重要,以便继续下一条记录,不要尝试其余的操作。