使用AWK根据一列获取2个制表符分隔文件的不常见行

时间:2018-12-31 13:06:17

标签: awk

我有2个制表符分隔的文件,如以下2个示例所示:

file1

chr10   103912167   103917248   NOLC1   ENST00000603742.1
chr16   18573197    18558622    NOMO2   ENST00000543392.1
chr1    120611947   120572610   NOTCH2  ENST00000256646.2

file2

chr16   18573197    18558622    NOMO2   ENST00000543392.1
chr1    120611947   120572610   NOTCH2  ENST00000256646.2
chr1    145209308   145248834   NOTCH2NL    ENST00000344859.3

基于4th列,我想隔离第一个文件中第二个文件中不存在的行。这是预期的输出:

expected output

chr10   103912167   103917248   NOLC1   ENST00000603742.1

我正在AWK中使用以下命令进行操作:

awk 'NR==FNR{a[$4]!=$4;next}a[$4]' file1 file2 > results.txt

但是它不返回我想要的。您知道如何修复该命令吗?

1 个答案:

答案 0 :(得分:2)

awk 'NR==FNR{a[$4]=1;next}!a[$4]' file2 file1
#=> chr10   103912167   103917248   NOLC1   ENST00000603742.1

由于要基于文件2从文件1输出内容,因此应首先读取文件2。

请注意,如果file2为空,则应更改为其他文件检查方法,例如ARGIND==1(用于GNU awk)或FILENAME=="file2"等。