Awk 比较并打印第二个文件中的行
要比较F11.txt中的第二个字段和F22.txt中的第一个字段,然后仅从两个文件打印匹配案例: F11.txtAwk 比较并打印第二个文件中的行,awk,Awk,要比较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获得的输出仅缺少F
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中的相应条目
a、 10,zzz,,
b、 20,zzz,
在何处更改代码以打印F22.txt中的行项目
预期产出:
a,10,zzz,10,yyy
b,20,zzz,20,yyy
我刚刚修改了你的
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
join
是专为此类任务设计的bash工具
$ join -t, -1 2 -2 1 file1 file2
10,a,zzz,yyy
20,b,zzz,yyy
是字段分隔符-t
定义要在-1
file1
定义要在-2
file2
您会看到匹配的列只打印一次,这通常是所需的行为,因为否则您将有两个相同的列,这将是多余的。当然,您知道如何使用例如,
awk
来重新排列列。请检查:非常感谢@sat,如何从f22.txt中只打印部分列,而不是从f22.txt中打印整行,就像只打印f22.txt的第一个字段一样,OP应该是a,10,zzz,10 b,20,zzz,20@AVN,使用拆分
。例:split(a[$2],arr,”,”;打印$0,arr[1]
(或)您可以只存储特定字段($1
),而不是将整行($0
)存储到中。例如:FNR==NR{a[$1]=1;next}
非常感谢