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

时间:2014-05-29 06:59:05

标签: 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的输出只丢失了F22.txt中的相应条目 一个,10,ZZZ, B,20,ZZZ,

在哪里更改代码以便从F22.txt打印订单项。

预期产出:

a,10,zzz,10,yyy
b,20,zzz,20,yyy

2 个答案:

答案 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