awk は、複数の入力ファイルから複数の出力ファイルに一括印刷します。

awk は、複数の入力ファイルから複数の出力ファイルに一括印刷します。

特定の列を抽出して* _2.txtファイルに保存するテキストファイルがいくつかあります。

awk '{print $(NF-3), $5}' *.txt > *_2.txt 

ただし、このコマンドは機能しません。 awkを使用してバッチ列抽出を実装するには?

入力する:

a.txt
aaa bbb ccc          109.6136     93.1900      1.0000    269.7332  35703.1790
ddd eee fff            48.8760     34.2100      1.0000    215.0926  35918.2717
ggg hhh iii                     17.3588    -65.4900      0.7000  14008.0228  49926.2945
...

b.txt 
qq ss rr         105     71.6239     68.1500      3.0000      1.3408   4329.5373
aa bb nn         110    271.3443    231.4200     10.0000     15.9395   4345.4768
rr uu ii         115    338.2163    415.6700     25.0000      9.5985   4355.0753
zz xx yy         120    536.0957    584.7900     50.0000      0.9485   4356.0238
...

目標出力:

a_2.txt
109.6136     93.1900      1.0000
 48.8760     34.2100      1.0000
 17.3588    -65.4900      0.7000
...

b_2.txt
105     71.6239     68.1500
110    271.3443    231.4200
115    338.2163    415.6700
120    536.0957    584.7900
...

各テキストファイルから特定の列を抽出し、名前に_2を追加して各テキストファイルに保存したいと思います。ターゲット列は $(NF-5)、$(NF-4)、$(NF-3) です。

答え1

次のようにAWKスクリプトでこれを行う必要があります。

awk 'FNR == 1 { sub(/\.txt$/, "_2.txt", FILENAME) }  { print $(NF-3), $5 > FILENAME }' *.txt

関連情報