[英]grep lines that appear partly in one file to another
我有一个#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
注意:在注释中正确指出,如果您坚持使用字段,则grep
将出现问题。
执行此操作grep -Fwf file2 file1 > out
。 或使用
awk 'NR==FNR{pats[$0]; next} $2 in pats' File2 File1
grep -iFf file1 file2 > file
您需要使用-F
选项告知grep
它处于fgrep
模式,然后-f
指定要读取的文件。
请注意,我已将您的>>
重定向(追加)更改为>
(创建)。 您将使用>>
进行测试,因为您的第一个测试将始终出现在文件的顶部,并且如果您匆匆忙忙,则认为它无法正常工作。 使用>
进行开发,如果您确实需要附加模式,请在确定基本cmd可以按要求工作后再添加。
最后,我会少量使用-i
(忽略大小写)选项。 如果您确实需要匹配目标字符串的小写版本,最好将它们包含在file1
,因此您的过程是自记录的。
高温超导
cat file1 | xargs -I@ -n1 grep @ file2 | tee file3
打印文件1。 使用xargs使文件1的每一行成为grep调用的模式。 将输出写入file3
输入文件1:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.