首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用awk将列中的字符串替换为来自另一个文件的匹配值

使用awk将列中的字符串替换为来自另一个文件的匹配值
EN

Stack Overflow用户
提问于 2020-06-18 09:05:36
回答 1查看 789关注 0票数 1

我遇到了一个小问题,试图使用awk替换列中的一些字符串,使用另一个文件作为替换的引用。当第二列的字符串与File2的第一列的字符串匹配时,我希望将File1第三列中的字符串替换为第二列的字符串。

以下是文件和希望得到的更清楚的结果。

File1

代码语言:javascript
复制
AAA   XZA
AAB   XSZ
AAC   XWQ
BAA   XCD

File2

代码语言:javascript
复制
ADZ-4       128720       AAA   451351351   5135   jhgt   215
SZQ-2       036051       AAB   55654   grt
KFD-9       036266       AAC 
ODS-10      036267       AAA   57321
POS-11      036268       AAC   8435435   764   frd

期望产出:

代码语言:javascript
复制
    ADZ-4       128720       XZA   451351351   5135   jhgt   215
    SZQ-2       036051       XSZ   55654   grt
    KFD-9       036266       XWQ 
    ODS-10      036267       XZA   57321
    POS-11      036268       XWQ   8435435   764   frd

我尝试了下面的命令行。

代码语言:javascript
复制
 awk 'FNR==NR{a[$1]=$2;next} {if ($3 in a){$3=a[1]}; print $0}' File1 File2 

但是我很肯定我没有在第二个弯刹车中做什么,因为它打印出一个文件,第三列删除了。如果我有几个,我会很高兴地使用,我有500+的替代做……

任何帮助都将不胜感激,如果你能解释,让我从我的错误中吸取教训,我将非常感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-18 09:11:08

您没有以正确的方式引用关联数组。请更改:

代码语言:javascript
复制
...{if ($3 in a){$3=a[1]}; print $0...

转入:

代码语言:javascript
复制
...{if ($3 in a){$3=a[$3]}; print $0

数组a的键是AAA,AAB...而不是1,2,3...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62446326

复制
相关文章

相似问题

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