Como posso dividir um arquivo de texto em novos arquivos

Como posso dividir um arquivo de texto em novos arquivos

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.
  • > $2redirecionar print para $2o 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.

informação relacionada