Eu tenho um arquivo de texto no seguinte formato:
001|fileA
002|fileA
003|fileA
004|fileB
005|fileB
006|fileC
.
.
.
xxx|fileX
Preciso dividir esse arquivo nos arquivos correspondentes a cada "|". Os nomes de novos arquivos como fileA ,fileB,fileC...fileX .
Responder1
tentar
awk -F\| '{ print $1 > $2 ; }' file
onde
-F\|
diga ao awk para usar|
como separador, | precisa ser escapado.> $2
redirecionar print para$2
o valor de.
no caso de muitos (> 10) arquivos:
for x in $(awk -F\| '!a[$2]++ { print $2}' file)
do
awk -F\| -v f="$x" '$2 == f { print $1}' file > "$x"
done
- primeiro awk apenas lista o nome do arquivo uniq
- 52 arquivos estão OK, isso pode ficar lento se houver centenas de arquivos.
outra alternativa, desde que os campos sejam "seguros" para serem colocados no shell
awk -F\| '{printf "echo %s >> %s\n",$1,$2;}' file | bash
- certifique-se de excluir o fileX antes, em caso de nova execução.