我有两个文件都有数百万条记录(每条记录的记录数量不同)
档案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
我该怎么做? 感谢
答案 0 :(得分:3)
我知道您曾询问awk
,但有特殊命令可以执行此操作并将其称为join
:
1)如果您的文件已经排序:
$ join -j 1 -t, A B
46400001,A4085 CYLCHFAN CAEATHRO,CAEATHRO,4
46402576,A4085 COFNOD WEDI CAU,BEDDGELERT,3
此处我们将第一个字段加入文件A
和B
,并使用逗号作为字段的分隔符。
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]}}