【发布时间】:2021-09-07 19:53:34
【问题描述】:
我试图合并file1 和file2,基于file2 中column2 中的数字和file1 中column1 中的数字,主要由逗号分隔。在file2中我要匹配的数字之间还有一个.分隔符
这是文件 1。
1,Mary,24 Fuller Rd
2,Fred,19 St Johns
3,Jonathan,8 Poplar Drive
4,Susan,116 Shepherds Way
5,Michael,4 Nerthern Court
和文件 2
Dawning,Order.5.DHL
Hawkins,Order.3.FedEx
Jacob,Order.2.Yodel
Plateu,Order.4.DPD
Martins,Order.1.Hermes
我的方法是从file2 和split 中提取密钥。作为单个文件,这是可行的,但是在处理多个文件时,行为很奇怪,而不是预期的结果。
awk -F, '{{split($2,i,".")}{ print i[2]}' file2
5
3
2
4
1
awk -F, 'NR==FNR{split($2,i,"."); next}{ print i[2]}' file2 file1
1
1
1
1
1
如果我删除split,我只会得到预期的结果,但无法提取匹配项。
awk -F, 'NR==FNR{array[$2]}END{ for (i in array) print i}' file2 file1
Order.4.DPD
Order.3.FedEx
Order.1.Hermes
Order.5.DHL
Order.2.Yodel
我已经采取了许多其他步骤但都失败了,但这可能会使问题过于臃肿,因此如果需要有关此方面的更多信息,请询问。
我的预期结果是这样的
Mary Martins 24 Fuller Rd
Fred Jacob 19 St Johns
Jonathan Hawkins 8 Poplar Drive
Susan Plateu 116 Shepherds Way
Michael Dawning 4 Nerthern Court
其中file2 中的column2 和file1 中的column1 基于数字匹配,因此打印file1 中的$2 和$NF 和file2 中的$1
这是我在众多尝试中失败的一些尝试
awk -F, 'NR==FNR {M=$1; array[$2]; next}{($1 in array)}END{ for (i in array) print $2, M, $NF}' file2 file1
awk -F, 'NR==FNR {M=$1; array[$2]; for (i in array) split(i,a,"."); next} $1==a[2]{print $2,M, $3}' file2 file1
awk -F, 'NR==FNR {M=$1; array[$2]; next}END { for (i in array) split(i,a,".")}($1~a[2]){ print $2,M}' file2 file1
我已经包含了perl 标签,因为我对perl 的解决方案很感兴趣,但如果可能的话,我主要想用awk 做到这一点。
谢谢。
【问题讨论】:
-
请注意,file1 和您的预期输出与第一行不匹配,可能是拼写错误
Fuller Road?此外,最好将输入和预期输出组合在一起,而不是需要太多滚动来理解问题。
标签: awk