我有一个文件#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#3
或awk
答案 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