如何向 awk 数组元素添加数字?

如何向 awk 数组元素添加数字?

如果我有以下 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=: 并且你的脚本应该正常工作。

相关内容