次の形式のテキストファイルがあります。
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を削除する必要があります。