テキストファイルを新しいファイルに分割する方法

テキストファイルを新しいファイルに分割する方法

次の形式のテキストファイルがあります。

001|fileA
002|fileA
003|fileA
004|fileB
005|fileB
006|fileC
.
.
.
xxx|fileX

このファイルを各「|」に対応するファイルに分割する必要があります。 fileA、fileB、fileC ... fileXなどの新しいファイルの名前。

答え1

努力する

 awk -F\| '{ print $1 > $2 ; }' file

どこ

  • -F\|区切り文字として使用するには、||をエスケープする必要があることをawkに通知します。
  • > $2印刷をリダイレクトする値です$2

ファイルが多い場合(> 10):

for x in $(awk -F\| '!a[$2]++ { print $2}' file)
do
    awk -F\| -v f="$x" '$2 == f { print $1}' file > "$x"
done
  • 最初のawkはuniqファイル名のみをリストします。
  • 52ファイルの場合は問題ありませんが、数百ファイルの場合は速度が遅くなる可能性があります。

フィールドを「安全に」シェルに入れることができる別のオプション

awk -F\| '{printf "echo %s >> %s\n",$1,$2;}' file | bash
  • 再実行を防ぐには、まずfileXを削除する必要があります。

関連情報