繁体   English   中英

grep行部分显示在一个文件中

[英]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#3awk

注意:在注释中正确指出,如果您坚持使用字段,则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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM