3

我有两个看起来像这样的文件:

文件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)

没有任何作用

4

1 回答 1

0

您可以使用

grep -vFf file2 file1

同样,grep -vf file2 file1也可以使用,但如果file2字符串包含*[应该作为文字字符读入,您可能会遇到麻烦,因为它们应该被转义。Fgrep这些字符串视为固定字符串。

笔记

  • -v: 反转匹配。
  • -f file: 从文件中获取正则表达式。
  • -F:将模式解释为固定字符串列表(而不是正则表达式),由换行符分隔,其中任何一个都将被匹配。

因此,它从中读取正则表达式file2并将它们应用于file1,一旦找到匹配项,由于反向搜索,该行不会输出。这已经足够了,因为只有第一列包含字母数字,其余的仅包含数字数据。

为什么您的命令不起作用

-x缩写--line-regexp)选项表示Select only those matches that exactly match the whole line

此外,请参阅文档中有关grep选项的grep更多信息。

于 2018-08-29T10:46:02.473 回答