想要比较F11.txt中的第二个字段和F22.txt中的第一个字段,然后仅从两个文件中打印匹配案例:
F11.txt
a,10,zzz
b,20,zzz
c,50,zzz
F22.txt
10,yyy
20,yyy
30,yyy
40,yyy
尝试过以下命令
awk ' BEGIN {FS = OFS = ","} FNR==NR {a[$1] = $0; next} ($2 in a) {print $0, a[$1]}' f22.txt f11.txt
F11.txt的输出只丢失了F22.txt中的相应条目 一个,10,ZZZ, B,20,ZZZ,
在哪里更改代码以便从F22.txt打印订单项。
预期产出:
a,10,zzz,10,yyy
b,20,zzz,20,yyy
答案 0 :(得分:0)
我刚刚修改了您的awk
,
awk 'BEGIN{FS=OFS=","} FNR==NR {a[$1]=$0; next} $2 in a{print $0, a[$2]}' f22.txt f11.txt
一切都是正确的。但是,您必须在打印时使用a[$2]
而不是a[$1]
。
另一个awk
版本,
awk -F, 'FNR==NR{a[$1]=$0;next} ($2 in a){print $0,a[$2]}' OFS=, f22.txt f11.txt
答案 1 :(得分:0)
join
是专为这类任务设计的bash工具
$ join -t, -1 2 -2 1 file1 file2
10,a,zzz,yyy
20,b,zzz,yyy
-t
是字段分隔符-1
定义要在file1
-2
定义要在file2
您会看到匹配的列只打印一次,这通常是所需的行为,因为否则您有两个相同的列,这将是多余的。当然,您知道如何对列进行重新洗牌,例如awk