【发布时间】:2018-10-07 12:34:50
【问题描述】:
我有两个看起来像这样的文件:
文件1:
RYR2 29 70 0.376583106063 4.77084855376
MUC16 51 94 0.481067457376 3.9233164551
DCAF4L2 0 13 0.0691414496833 3.05307268261
USH2A 32 62 0.481792717087 2.81864194236
ZFHX4 14 37 0.371576262084 2.81030548752
文件2:
A26B2
RYR2
MUC16
ACTL9
我需要根据第一列比较它们并只打印第一个文件中不在第二列的那些行,所以输出应该是:
DCAF4L2 0 13 0.0691414496833 3.05307268261
USH2A 32 62 0.481792717087 2.81864194236
ZFHX4 14 37 0.371576262084 2.81030548752
我用 grep 试过了:
grep -vFxf file2 file1
使用 awk:
awk 'NR==FNR {exclude[$0];next} !($0 in exclude)' file 2 file1
通讯:
comm -23 <(sort file1) <(sort file2)
没有用
【问题讨论】:
-
grep -vf file2 file1适合我。检查您的文件是否有 DOS 行结尾。 -
@Cyrus 有效!非常感谢
-
您的 awk 非常接近:您只想查看 第一个单词 是否在数组中:
!($1 in exclude)(当然删除“文件”和"2" 获取正确的文件) -
对于你的 grep 命令,
-x选项在这里是不正确的:它指示 grep 将整行与模式进行比较。