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

时间:2014-03-20 09:35:06

标签: regex grep

我有两个文件:

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中定义的键与clients.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

也就是说模式或匹配的线条。但我可以合并吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

如果 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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

使用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