首页 > 解决方案 > 使用 awk 或 sed 将关联数组索引替换为其值

问题描述

我想替换ref使用键值对的列值id

cat id

[1] a 8-23
[2] g 8-21
[3] d 8-13

cat ref

a 1 2
b 3 4
c 5 3
d 1 2
e 3 1
f 1 2
g 2 3

期望的输出

8-23    1   2
b       3   4
c       5   3
8-13    1   2
e       3   1
f       1   2
8-21    2   3

我认为最好使用 awk 来完成。

cat replace.awk

BEGIN { OFS="t" }

NR==FNR {
    a[$2]=$3; next
}

$1 in !{!a[@]} {

print $0
}

不确定我需要改变什么?

标签: awk

解决方案


$1 in !{!a[@]}不是 awk 语法。你只需要$1 in a

BEGIN { OFS='\t' }

NR==FNR {
    a[$2] = $3
    next
}

{
    $1 = ($1 in a) ? a[$1] : $1
    print
}
  • 强制 OFS 更新,这个版本总是分配给$1
  • print$0如果未指定则使用

推荐阅读