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

如何基于AWK中的一列连接两个文件,awk,Awk,我有两个文件,两个文件中都有数百万条记录(每个文件中的记录数量不同) 归档 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 4640000

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

归档

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
我该怎么做? 谢谢你试试这个

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您的_awk.awk f2 f1
格式。在
您的_awk.awk
文件中:

BEGIN{OFS=","} {if (NR==FNR) {a[$1]=$2; next} if ($1 in a) {print $1, $2, $3, a[$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您的_awk.awk f2 f1
格式。在
您的_awk.awk
文件中:

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

我知道您已经询问了有关
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

$join-j1-t,我知道你问过关于
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

$join-j 1-t,回答了数百次,在谷歌上搜索你的标题会在这个网站和U&L上找到大量的结果。我知道我已经看过了,并且尝试过了,但是我无法理解答案,也无法让它为我的工作@999999999999999999999999999999答案可能重复数百次,在谷歌上搜索你的标题会在这个网站和U&L上显示大量的结果。我知道我已经看过了,并尝试过了,但我无法理解答案,也无法让它为我工作@999999999999999999999999999999可能是windows命令提示符下运行的I的重复,并收到错误:awk:cmd。行:1:'开始{OFS=,}awk:cmd。行:1:^表达式中的字符“”无效我正在windows命令提示符下运行,出现错误:awk:cmd。行:1:'开始{OFS=,}awk:cmd。行:1:^表达式中的字符“”无效