ファイルの各行は新しいファイルに変換されます。

ファイルの各行は新しいファイルに変換されます。

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

おすすめ記事