我正在尝试比较两个文件,我需要打印两个文件中的匹配行。
档案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
你能帮我吗?
答案 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个字段,如果是,则打印两个。
(未测试的)