在 awk 中使用循环索引

在 awk 中使用循环索引

如果这个问题之前有人问过,我深表歉意。我认为有人问过类似的问题,但没有一个与此完全相同。

我有一个包含一些列的文件

假设它看起来像这样

1 3 4 12
3 5 8 12.1
. . . .

因此它有值列。我想选择第二列,并为该列中的所有元素添加一个值,这样它看起来可能像

1 3.2 4 12
3 5.2 8 12.1
. x+0.2 . .

但是,我希望迭代器根据我查看的数组中的某些值进行更改。我还希望文件名能够反映出这种变化。因此,我们可以说原始文件名为

文件.txt

但当我浏览文件时,我希望名称能够反映出添加的内容,这样它看起来就像

file_0.txt 这只是在原始值上添加 0,或者没有变化,但最好采用相同的格式以便稍后收集一些值。file_0.2.txt file_0.4.txt ...每次我都会添加 0.2 的增量。

我要说的是,对于我的具体应用,我必须选择一组行来执行此操作,这就是我设置 NR 边界的原因。

file=${1?No file given}

boundsToTest=($(seq 0 0.2 5))

for i in "${boundsToTest[@]}"
do
     newFile=$(echo $file | awk -v i="$i" "NR==7,NR==126 {$3=$3+i}")
     newFileName="$(basename $file .txt)"_$i.txt
     mv $newFile ${newFileName}
done

到目前为止,此方法有效,并相应地更改了名称,但并未将值添加到列中。任何有关传递 awk 变量以在文件内进行数学运算的帮助都将不胜感激。

谢谢你!

相关内容