文件1:
1075908|2178412|brown_eyeshorty@att.net|Claude|Desmangles
175908|2178412|naim.kazi@webtv.net|Naim|Kazi
175972|212946872418|gil_maynard@hotmail.com|Munster|Herman
175972|212946872418|meghanj4@lycos.com|Meghan|Judge
175972|212946872418|quenchia@gmail.com|Anna|Balint
176046|255875|keion@netscape.net|Charlene|Johnson
176046|255875|keion112@netscape.net|Charlene|Johnson
176086|2480881|lourdsneil@gmail.com|Lourds|Herman
文件2:
89129090|Sadiq|Islam
212946872418|Anna|Balint
255875|Charlene|Johnson
89234902|Bob|Brown
09123789|Fabio|Vanetti
我想在以下基础上提取所有值都匹配的行:
该示例的预期输出为:
175972|212946872418|quenchia@gmail.com|Anna|Balint
176046|255875|keion@netscape.net|Charlene|Johnson
176046|255875|keion112@netscape.net|Charlene|Johnson
我正在使用的两个输入都非常大(分别为11Gb和3Gb)。
我能想到的唯一可能的(混乱的)解决方法是将要连接的值合并到一个单独的附加列中,然后使用Join(对此我很陌生)。
答案 0 :(得分:1)
grep -f <(sed 's,|,|[^|]*|,' file2) file1
返回
175972|212946872418|quenchia@gmail.com|Anna|Balint
176046|255875|keion@netscape.net|Charlene|Johnson
176046|255875|keion112@netscape.net|Charlene|Johnson
说明:
第一个命令:
sed 's,|,|[^|]*|,' file2
将file2转换为模式列表以在文件1中搜索并返回:
89129090|[^|]*|Sadiq|Islam
212946872418|[^|]*|Anna|Balint
255875|[^|]*|Charlene|Johnson
89234902|[^|]*|Bob|Brown
09123789|[^|]*|Fabio|Vanetti
第二条命令:
grep -f <(command1) file1
搜索文件1中的模式
答案 1 :(得分:1)
请您尝试以下。
awk -F'|' '
FNR==NR{
a[$2,$4,$5]=(a[$2,$4,$5]?a[$2,$4,$5] ORS:"")$0
next
}
(($1,$2,$3) in a){
print a[$1,$2,$3]
}' Input_file1 Input_file2
输出如下。
175972|212946872418|quenchia@gmail.com|Anna|Balint
176046|255875|keion@netscape.net|Charlene|Johnson
176046|255875|keion112@netscape.net|Charlene|Johnson