テキストファイルを新しいファイルに分割するにはどうすればいいですか

テキストファイルを新しいファイルに分割するにはどうすればいいですか

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

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's の値にリダイレクト印刷します。

ファイル数が多い場合(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は一意のファイル名をリストするだけです
  • 52 個のファイルは問題ありませんが、数百個のファイルの場合は遅くなる可能性があります。

別の方法として、フィールドがシェルに「安全」に配置されている場合

awk -F\| '{printf "echo %s >> %s\n",$1,$2;}' file | bash
  • 再実行する場合は、必ず事前に fileX を削除してください。

関連情報