我试图合并file1
并file2
基于 column2 from 中file2
的数字和 column1 from 中的数字file1
主要由逗号分隔。.
我试图匹配的数字之间也有一个分隔符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
Run Code Online (Sandbox Code Playgroud)
和文件 2
Dawning,Order.5.DHL
Hawkins,Order.3.FedEx
Jacob,Order.2.Yodel
Plateu,Order.4.DPD
Martins,Order.1.Hermes
Run Code Online (Sandbox Code Playgroud)
我的方法是从file2
with 中提取密钥split
。作为单个文件,这是可行的,但是当处理多个文件时,行为很奇怪,而不是预期的结果。
awk -F, '{{split($2,i,".")}{ print i[2]}' file2
5
3
2
4
1
Run Code Online (Sandbox Code Playgroud)
awk -F, 'NR==FNR{split($2,i,"."); next}{ print i[2]}' file2 file1
1
1
1
1
1
Run Code Online (Sandbox Code Playgroud)
如果我删除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
Run Code Online (Sandbox Code Playgroud)
我还采取了许多其他步骤,但都失败了,但这可能会使问题变得过于臃肿,所以如果需要更多关于此的信息,请询问。
我的预期结果是这样的
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
Run Code Online (Sandbox Code Playgroud)
其中 column2 fromfile2
和 column1file1
基于数字匹配,因此打印$2
和$NF
fromfile1
和$1
fromfile2
以下是我在众多尝试中失败的一些
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
Run Code Online (Sandbox Code Playgroud)
我已经包含了perl
标签,因为我对解决方案感兴趣,perl
但awk
如果可能的话,主要想这样做。
谢谢你。
$ awk -F'[.,]' 'NR==FNR{a[$3]=$1; next} {print $2, a[$1], $3}' file2 FS=, file1
Mary Martins 24 Fuller Road
Fred Jacob 19 St Johns
Jonathan Hawkins 8 Poplar Drive
Susan Plateu 116 Shepherds Way
Michael Dawning 4 Nerthern Court
Run Code Online (Sandbox Code Playgroud)
-F'[.,]'
使用.
或,
作为字段分隔符file2
NR==FNR{a[$3]=$1; next}
将file2
基于第三个字段的第一个字段保存为键FS=,
file1
参数列表中的before将字段分隔符更改为,
forfile1
print $2, a[$1], $3
打印所需数据(默认OFS
为单空格字符) 归档时间: |
|
查看次数: |
63 次 |
最近记录: |