awk从两个未分类的文件打印匹配的行

时间:2016-06-09 15:06:35

标签: unix awk

我正在尝试比较两个文件,我需要打印两个文件中的匹配行。

档案1

a;c1|a|data  
a;c2|a|data  
b;c1|b|data  
b;c1|b|data  

文件2

a;c2|a_1|data  
b;c1|b_1|data  
a;c3|a_1|data  
b;c1|b_1|data  
a;c1|a_1|data  

输出文件

a;c1|a|data  
a;c2|a|data  
b;c1|b|data  
b;c1|b|data  
a;c2|a_1|data  
b;c1|b_1|data  
b;c1|b_1|data  
a;c1|a_1|data  

你能帮我吗?

2 个答案:

答案 0 :(得分:1)

使用awk求解需要多次传递和gawk排序输入选项,这里是grep替代

$ function f(){ grep -f <(cut -d'|' -f1 "$2") "$1"; }; f file1 file2; f file2 file1

a;c1|a|data
a;c2|a|data
b;c1|b|data
b;c1|b|data
a;c2|a_1|data
b;c1|b_1|data
b;c1|b_1|data
a;c1|a_1|data

答案 1 :(得分:1)

awk 'FNR==NR{a[$1,$3]=$0}FNR!=NR{if(a[$1,$3])print a[$1,$3] "\n" $0}' f1 f2 

第一个模式在给定的第一个文件中存储(最后一个)行 第1&amp;第3场 第二种模式检查第一和第二种模式。在第一个文件中找到第二个文件中的第3个字段,如果是,则打印两个。

(未测试的)