【问题标题】:Matching and replacing variables in columns using AWK使用 AWK 匹配和替换列中的变量
【发布时间】:2022-01-15 12:30:55
【问题描述】:

我正在使用file1.txt 中的值匹配和替换file2.txt 中的值。不匹配的值需要替换为NA。我试图在下面编写一个小的 AWK 代码,但没有按要求提供输出。欢迎任何建议或帮助。

awk 'FNR==NR 
{ a[$1]=$2;next}
{
for (i=1;i<=NF;i++) {
$i = ($i in a) ? a[$i] : "NA"
}
}1' file1.txt file2.txt

相反,我得到如下输出:

NAk
NAt1
NAp1
...

示例文件: 文件1.txt

EN01    Car
EN28    Bus
EN37    Scooter
EN49    Van

file2.txt

EN01    EN28
EN28    EN37
ENXX    EN49
EN01    EN28

输出(我需要)

Car   Bus
Bus   Scooter
NA    Van
Car   Bus

_

【问题讨论】:

  • 使用您的示例输入数据和您的awk 程序,输出不是您所显示的。请编辑您的问题并准确显示您输入的内容。

标签: for-loop awk


【解决方案1】:

也许

awk '
    NR == FNR {vehicle[$1] = $2; next}
    function get(id) { return id in vehicle ? vehicle[id] : "NA" }
    {print get($1), get($2)}
' file1.txt file2.txt | column -t

代码中的错误是FNR==NR 之后的换行符:条件必须与操作块在同一行。 见the awk tag info page

【讨论】:

    猜你喜欢
    • 2013-06-01
    • 1970-01-01
    • 2016-08-27
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 2010-11-02
    • 2014-01-04
    相关资源
    最近更新 更多