我有一个 3 列文本文件(XYZ 坐标),我需要迭代地将常量添加到第一列,同时附加到原始文件的末尾。我尝试了几种选择,但这是最清楚地说明我正在尝试做的事情的一个:
awk ' { for ( i=-4; i<=4; i+=2 ) $1+=i }' coords.txt >> new_coords.txt
此命令会产生一个空白的 new_coords.txt 文件。如何将 for 循环的输出获取到新的文本文件中?
最小输入
4 5 6
7 8 9
最小输出
0 5 6
3 8 9
2 5 6
5 8 9
4 5 6
7 8 9
6 5 6
9 8 9
8 5 6
11 8 9
答案1
我认为这可能是将循环放在 Awk 之外实际上有意义的(罕见)情况之一:
$ for ((i=-4;i<=4;i+=2)); do awk -v i="$i" '{$1+=i} 1' Input; done
0 5 6
3 8 9
2 5 6
5 8 9
4 5 6
7 8 9
6 5 6
9 8 9
8 5 6
11 8 9
否则:
$ awk '{a[NR] = $1; b[NR] = $2 FS $3} END{for(i=-4;i<=4;i+=2){for(j=1;j<=NR;j++) print a[j]+i, b[j]}}' Input
0 5 6
3 8 9
2 5 6
5 8 9
4 5 6
7 8 9
6 5 6
9 8 9
8 5 6
11 8 9