首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AWK,通过匹配两个文件中的字段替换字段值。

AWK,通过匹配两个文件中的字段替换字段值。
EN

Unix & Linux用户
提问于 2019-06-04 15:56:57
回答 1查看 158关注 0票数 2

我有2个文件Address.csv和ZipCode.txt,我希望生成一个类似于Address.csv的文件,并在邮政编码与Address.csv文件中的Zip的前5个字符匹配时,将城市字段从" city“更新为”field“。

我所拥有的:

代码语言:javascript
运行
复制
  Address.csv
  Zip,Address1,Address2,conty,city,state
  65432-3421,115 main st,atlantic,city,new jersey
  45678-4098,654 2nd st n.,bergin,city,new jersey
  23456-3425,4215 1st st. s.,suite a2,camden,city,new jersey
  12345-6278,3587 main st,apt j1,essex,city,new jersey

  ZipCode.txt
  23456
  12345
  34567
  45678

我想要的:

代码语言:javascript
运行
复制
  NewAddress.csv
  Zip,Address1,Address2,conty,city,state
  65432-3421,115 main st,atlantic,city,new jersey
  45678-4098,654 2nd st n.,bergin,found,new jersey
  23456-3425,4215 1st st. s.,suite a2,camden,found,new jersey
  12345-6278,3587 main st,apt j1,essex,found,new jersey

我在Simlev 基于另一个文件中匹配值的awk替换字段值的帮助下所做的尝试:

代码语言:javascript
运行
复制
  awk -F, -v OFS="," 'NR==FNR {a[$1]++;next} $1 in a {$4="found"} 1' ZipCode.txt Address.csv     
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2019-06-04 16:37:16

脚本中必须更改的主要内容是使用函数substr获取第一个字段的前5个字符。

Address.csv中的数据不一致。前两条数据线有5个字段,其余6个字段。这就是为什么我使用$(NF-1) (下一个到最后一个字段)而不是$4 (第四个字段)。否则,用示例数据更改错误的字段。

代码语言:javascript
运行
复制
awk -F, -v OFS="," 'NR==FNR {a[$1]++;next} substr($1,1,5) in a {$(NF-1)="found"} 1' ZipCode.txt Address.csv

这个指纹

代码语言:javascript
运行
复制
Zip,Address1,Address2,conty,city,state
65432-3421,115 main st,atlantic,city,new jersey
45678-4098,654 2nd st n.,bergin,found,new jersey
23456-3425,4215 1st st. s.,suite a2,camden,found,new jersey
12345-6278,3587 main st,apt j1,essex,found,new jersey
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/522862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档