迭代地向文本文件的列添加值

迭代地向文本文件的列添加值

我有一个 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

相关内容