Awk 比较并打印第二个文件中的行

Awk 比较并打印第二个文件中的行,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

要比较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中的相应条目 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}
非常感谢