4つの列と5000行のファイルがあります。各ファイルが元のファイルの行を持つように、このファイルから5000個の新しいファイルを作成したいと思います。また、4番目の列の値に基づいて新しいファイルの名前を指定したいと思います。例:次のファイル(XXXX.txt)には4行があります。
ファイル:XXXX.txt
1 315 4567 G1
1 212 345 G2
2 315 25674 G3
3 12 235673 G4
新しいファイルが期待されます。
ファイル:G1
1 315 4567 G1
ファイル:G2
1 212 345 G2
ファイル:G3
2 315 25674 G3
ファイル:G4
3 12 235673 G4
私は次のコマンドを試しました。
awk '{print > $0}' < XXXX.txt
このコマンドは必要に応じて新しいファイルを生成しますが、元のファイルの列4に基づいて新しいファイルに名前を付けることはできません。
答え1
awk
スクリプトを少し変更してみることができます。
awk '{print > $4}' XXXX.txt
ただし、ソースファイルに他の行と同じ4列目の行がある場合、最終ファイルには最後の行のみが含まれます。これを防ぐには、次のようにしてください。
awk '{print >> $4}' XXXX.txt
注:レコードは2回追加されるため、この操作を複数回実行しないでください。
「オープンファイルが多すぎます」エラーが発生した場合は、次のスクリプトを使用して出力ファイルを明示的に閉じることができます。
awk '{print >> $4;close($4)}' XXXX.txt
答え2
あなたは少し近いです。
awk '{print > $0}'
と同じで、awk '{print $0 > $0}'
わかりやすいです。
行全体($ 0)ではなく、4行目($ 4)というファイルに1行を印刷すると正しいです。
awk '{print $0 > $4}'