![如何向 awk 数组元素添加数字?](https://linux22.com/image/4747/%E5%A6%82%E4%BD%95%E5%90%91%20awk%20%E6%95%B0%E7%BB%84%E5%85%83%E7%B4%A0%E6%B7%BB%E5%8A%A0%E6%95%B0%E5%AD%97%EF%BC%9F.png)
如果我有以下 bash 变量:
$ echo "${pos}"
201
719
744
205
354
...以下产生...
!#bin/bash
(
IFS=:
awk -v str2="$pos" -v sep="[$IFS]" '
BEGIN {
m = split(str2, b, sep)
for (i=1; i<=m; ++i) {print b[i]}
}
'
)
-----------------
$ ./myscript.sh
201
719
744
205
354
...但是然后做...
(
IFS=:
awk -v str2="$pos" -v sep="[$IFS]" '
BEGIN {
m = split(str2, b, sep)
for (i=1; i<=m; ++i) {print b[i]+10}
}
'
)
------
./myscript.sh
211
...所以添加有效,但没有打印所有元素的结果。为什么不?
答案1
这是你的 IFS=: 设置不正确。因此 split() 不会用值填充数组,而是用 str2 的一个值填充它,因此在 for 循环中,您打印 b[i] 但实际上打印一次 b[1] 这是整个 str2 并且因为它有新行你认为它打印了数组 b 的成员,但如果你检查 split() 的 retrn 值,它是 1。删除 IFS=: 并且你的脚本应该正常工作。