比较两个制表符分隔文件并打印匹配的行

时间:2015-05-09 13:17:59

标签: regex

我有两个很大的表格文件,file1和file 2.我想比较这两个文件并打印匹配的行,如下所示。

file_1

  

ENSDARG00000000760
  的 ENSDARG00000001015
  ENSDARG00000001549
  ENSDARG00000002445
  ENSDARG00000003102
  ENSDARG00000004594
  ENSDARG00000004851

file_2

  

ENSDARG00000000151 ENSDART00000000160 2292 chovy.60083   ENSDARG00000000151 ENSDART00000151127 1470 chovy.60083   ENSDARG00000000175 ENSDART00000146636 1832 chovy.300567   ENSDARG00000000966 ENSDART00000001092 6325 chovy.254634   ENSDARG00000000966 ENSDART00000140618 6295 chovy.254634    ENSDARG00000001015 ENSDART00000001148 1791 chovy.388956   ENSDARG00000001015 ENSDART00000104891 1835 chovy.388956   ENSDARG00000001015 ENSDART00000141913 994 chovy.283553

我想要的输出:

  

ENSDARG00000001015 ENSDART00000001148 1791 chovy.388956   ENSDARG00000001015 ENSDART00000104891 1835 chovy.388956   ENSDARG00000001015 ENSDART00000141913 994 chovy.283553

我的代码:

  

grep -wFf file1.txt file2.txt> output.txt的

我认为它不起作用..

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

awk 'FNR==NR{a[$1]=1;next}a[$1]' file1.txt file2.txt > output.txt

细节:

FNR==NR是一个测试当前文件的行号是否等于awk处理的当前行号的条件(这是一个知道你是在第一个文件还是在第二个文件中的技巧)。当awk启动时,重置新文件FNR(文件编号行),但NR(编号行)继续逐行递增。

{a[$1]=1;next}如果为true,则将数组的项设置为“a”,将字段设置为键,将1设置为值,然后立即转到下一行。

a[$1]也是一个测试。如果file2的第一个字段是数组“a”中的现有键(理解a[$1]不为空),则打印该行。