繁体   English   中英

grep-匹配两个文件时如何返回模式和匹配行?

[英]grep - How to return the pattern and the matching line when matching two files?

我有两个文件:

pattern.csv,其中包含类似

paul hung
james
julien pierre

和clients.csv包含

Paul Hung Chong;3
James Malroy;4
Julien Pierre Take;5

我想回来

paul hung;Paul Hung Chong;3
james;James Malroy;4
julien Pierre;Julien Pierre Take;5

这样我就可以在pattern.csv中定义的键与client.csv中定义的键之间创建匹配表

到目前为止,我尝试了

grep -i -F -f 'patterns.csv' 'clients.csv' > matching.csv

哪个返回

Paul Hung Chong;3
James Malroy;4
Julien Pierre Take;5

grep -i -F -f 'patterns.csv' 'clients.csv' > matching.csv 

哪个返回

Paul Hung
James
Julien Pierre

也就是说,图案或匹配的线。 但是我可以将两者合并吗?

谢谢 !

如果gawk适合您:

awk -v IGNORECASE=1 -v OFS=";" 'NR==FNR{a[$0];next}
      {for(x in a)if($0~x){print x,$0;break}}' pattern.txt file.csv

请注意,如果您的模式文件包含正则表达式特殊含义的字符,则此行存在一定的风险。

有时候,这就像为工作找到合适的工具一样简单

$ paste -d';' pattern.csv clients.csv
paul hung;Paul Hung Chong;3
james;James Malroy;4
julien pierre;Julien Pierre Take;5

使用awk:

awk -F';' 'FNR==NR{a[++i]=$1;next} {for (k=1; k<=i; k++) 
           if (index(tolower($1), tolower(a[k]))) print a[k], $0}' OFS=';' g1 g2
paul hung;Paul Hung Chong;3
james;James Malroy;4
julien pierre;Julien Pierre Take;5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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