テキストファイルの列に繰り返し値を追加します。

テキストファイルの列に繰り返し値を追加します。

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の外側にループを置くことが実際に意味のある(まれな)ケースの1つです。

$ 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

おすすめ記事