在两个文本文件中查找匹配项

时间:2016-07-20 10:51:14

标签: unix text awk sed grep

我有两个文件,第一个是我记录了这种类型的数据:

77437234:AAAAAA    
34434342:BBBBBB     
65434343:AAAAAA      
99543545:GGGGGG

在第二个文件中,第一个文件中存在大量数据(单词)(例如AAAAAAGGGGGG),需要在第一个文件中找到匹配项并复制它们进入新的最终文件

(需要复制第一个文件的整行)

1 个答案:

答案 0 :(得分:2)

您可以使用grep来匹配单词文件:

$ cat file
77437234:AAAAAA
34434342:BBBBBB
65434343:AAAAAA
99543545:GGGGGG
$ cat words
AAAAAA
GGGGGG
$ grep -Fwf words file 
77437234:AAAAAA
65434343:AAAAAA
99543545:GGGGGG

要将输出保存在新文件中,请使用重定向:

$ grep -Fwf words file > final

选项:

  

-w, - word-regexp

     

仅选择包含构成整个单词的匹配项的行。测试是匹配的子字符串必须是   在行的开头,或前面是非单词成分   字符。同样,它必须位于该行的末尾                 或者后跟一个非单词构成字符。单词构成字符是字母,数字和下划线。

     

-f FILE, - file = FILE

     

从FILE获取模式,每行一个。空文件包含零模式,因此不匹配任何内容。 (-f由POSIX指定。)

     

-F, - 固定字符串

     

将PATTERN解释为固定字符串列表,由换行符分隔,其中任何一个都要匹配。 (-F由POSIX指定。)

如果您想要与确切的字段匹配,可以使用以下awk脚本:

$ awk -F: 'NR==FNR{words[$0];next}$2 in words' words file
77437234:AAAAAA
65434343:AAAAAA
99543545:GGGGGG