如何基于AWK中的一列连接两个文件

时间:2015-09-23 10:15:03

标签: awk

我有两个文件都有数百万条记录(每条记录的记录数量不同)

档案A

46901208,(SPUR OFF) FFERM LLIDIART WERDD,WRECSAM
85315934,A4077 FROM CRUGHYWEL ROAD,CRUGHYWEL
46402576,A4085 COFNOD WEDI CAU,BEDDGELERT
46400001,A4085 CYLCHFAN CAEATHRO,CAEATHRO

档案B

46408008,1
46400005,1
46400001,4
46402576,3

我想根据匹配的$ 1来合并这两个文件,那些不匹配的文件我不希望它们被输出。

期望的输出:

46402576,A4085 COFNOD WEDI CAU,BEDDGELERT,3
46400001,A4085 CYLCHFAN CAEATHRO,CAEATHRO,4

我该怎么做? 感谢

2 个答案:

答案 0 :(得分:3)

我知道您曾询问awk,但有特殊命令可以执行此操作并将其称为join

1)如果您的文件已经排序:

$ join -j 1 -t, A B
46400001,A4085 CYLCHFAN CAEATHRO,CAEATHRO,4
46402576,A4085 COFNOD WEDI CAU,BEDDGELERT,3

此处我们将第一个字段加入文件AB,并使用逗号作为字段的分隔符。

2)如果您的文件未排序,并且您希望使用bash一次性执行所有操作:

$ join -j 1 -t, <(sort A) <(sort B)
46400001,A4085 CYLCHFAN CAEATHRO,CAEATHRO,4
46402576,A4085 COFNOD WEDI CAU,BEDDGELERT,3

答案 1 :(得分:1)

试试这个

awk -F"," 'BEGIN{OFS=","} {if (NR==FNR) {a[$1]=$2; next} if ($1 in a) {print $1, $2, $3, a[$1]}}' f2 f1

<强>更新

使用awk -F"," -f your_awk.awk f2 f1格式。在your_awk.awk文件中:

BEGIN{OFS=","} {if (NR==FNR) {a[$1]=$2; next} if ($1 in a) {print $1, $2, $3, a[$1]}}