awk - 使用 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
}
不确定我需要改变什么?
解决方案
$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
如果未指定则使用
推荐阅读
- c# - 如何提高搜索性能
- c++ - 迭代所有可能的浮点值,从最低开始
- php - 为什么 DateTimeZone 的 getOffset() 需要一个参数?
- ios - NSScrollView (NSTouchBar) 中的 NSPopoverTouchBarItems
- gradle - gradle & maven-publish:“来自”是什么意思?
- typescript - 受约束的泛型函数中令人困惑的“[ts] Type ... 不可分配给类型 [2322]”错误
- html - 使用 CSS 网格、伪元素和固定定位的神秘行为
- php - 特定页面上的 PHPSESSID 为 null
- ionic-framework - 尝试使用设备插件 ionic 4 时出错
- javascript - 如何删除 Javascript EventEmiiter 箭头函数回调