次の形式のテキスト ファイルがあります。
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 を削除してください。