grep行部分出现在另一个文件中

时间:2017-08-10 23:52:00

标签: bash awk grep

我有一个文件#1有这样的行:

SSJ4_00089026.dpx SSJ4_00089134.dpx SSJ4_00090253.dpx SSJ4_00090267.dpx SSJ4_00090379.dpx SSJ4_00090392.dpx SSJ4_00090492.dpx SSJ4_00094320.dpx

和另一个文件#2有这样的行:

693d092aba91a6acd2b8d73903fe4f78 SSJ4_00089026.dpx 0333b53c486de6a7214c05fd583f9745 SSJ4_00089134.dpx fdc713709251e0538a84549355627e65 SSJ4_00090253.dpx a8766ba5d6e1ee854bf7db10c05c7e55 SSJ4_00090267.dpx 733f6564ca442974555a76b91d506cff SSJ4_00090379.dpx f6154ddf1d7ae7c8076f08c25c9fe2c3 SSJ4_00094320.dpx

#1中的所有行都在#2中,但它们没有哈希值。 并非#2中的所有行都在#1中。

我想从#2中提取#1的所有行,包括哈希,并将它们放入一个新文件#3。所以#3看起来像是:

ccfd092aba91a6acd2b8d73903fe4f78 SSJ4_00089026.dpx 056nb53c486de6a7214c05fd583f9745 SSJ4_00089134.dpx 45g313709251e0538a84549355627e65 SSJ4_00090253.dpx

我正在考虑用grep这样的命令 grep -v -f -i file#1 file#2 >> file#3awk

3 个答案:

答案 0 :(得分:4)

注意:正确评论中指出stringbuf如果你坚持使用字段会有问题。

执行此操作grep。 ,或使用

grep -Fwf file2 file1 > out

答案 1 :(得分:3)

grep -iFf file1 file2 > file

您需要使用grep选项告知fgrep它处于-F模式,然后-f指定要读取的文件。

请注意,我已将>>重定向(追加)更改为>(创建)。 您将使用>>进行测试,因为您的第一次测试将始终显示在文件的顶部,如果您急于求成,您将不会认为它正在运行。使用>进行开发,如果确实需要追加模式,请在确定基本cmd按要求工作后添加。

最后,我谨慎地使用-i(忽略大小写)选项。如果您确实需要匹配目标字符串的小写版本,最好将其包括在file1中,这样您的流程就会自我记录。

IHTH

答案 2 :(得分:0)

cat file1 | xargs -I@ -n1 grep @ file2 | tee file3

打印文件1。使用xargs使文件1的每一行成为grep调用的模式。将输出写入file3

输入file1:

SSJ4_00086400.dpx
SSJ4_00086403.dpx

输入文件2:

693d092aba91a6acd2b8d73903fe4f78  SSJ4_00086400.dpx
0333b53c486de6a7214c05fd583f9745  SSJ4_00086401.dpx
fdc713709251e0538a84549355627e65  SSJ4_00086402.dpx
a8766ba5d6e1ee854bf7db10c05c7e55  SSJ4_00086403.dpx
733f6564ca442974555a76b91d506cff  SSJ4_00086404.dpx
f6154ddf1d7ae7c8076f08c25c9fe2c3  SSJ4_00086405.dpx

输出文件3:

693d092aba91a6acd2b8d73903fe4f78  SSJ4_00086400.dpx
a8766ba5d6e1ee854bf7db10c05c7e55  SSJ4_00086403.dpx