awkからパターンをコピーして次の行に貼り付けます。

awkからパターンをコピーして次の行に貼り付けます。

私のフォルダにはtxtファイルがたくさんあります。各ファイルにはこの形式の1行が含まれています。

8852 0.53451 0.55959 0.65494 0.36047

次の行に固定数字を追加し、残りの4つの列は以下のように元の行からコピーされます。

8852 0.53451 0.55959 0.65494 0.36047

9997 0.53451 0.55959 0.65494 0.36047

これまで、フォルダ内のコマンドを実行して9997を追加しました。

find *.txt -exec sh -c 'echo "9997" >> $0' {} \;

残りの4つの列をコピーしました。

for files in .; do awk '{$1=""; print substr($0,2)}' *.txt;done

ただし、各ファイルの次の行ではなく出力に印刷されます。

まだすべて整理できず、近づいたような感じもしますが、おそらく間違った方向かもしれません。私はawk '{print "\n"$2,$3,$4,$5}' を試しましたが、やはり動作しませんでした。

助けてくれてありがとう!ありがとうございます。

ベストアンサー1

私はお勧めしますawk '{print; $1 = 9997; print}'

$ echo '8852 0.53451 0.55959 0.65494 0.36047' | awk '{print; $1 = 9997; print}'
8852 0.53451 0.55959 0.65494 0.36047
9997 0.53451 0.55959 0.65494 0.36047

複数のファイルに変換を適用すると述べました。ループを使用してこれを行うことができます。

for f in *.txt; do  awk '{print; $1 = 9997; print}' "$f"; done

または(再帰的に)使用find

find . -name '*.txt' -exec awk '{print; $1 = 9997; print}' {} \;

ただし、拡張子が . である最新バージョンの GNU Awk がない場合、結果はリンクされ、-i inplace標準出力に書き込まれます。

おすすめ記事