Linux

迭代地將值添加到文本文件的列

  • May 17, 2019

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

我認為這可能是(罕見的)將循環放在 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

引用自:https://unix.stackexchange.com/questions/519551