Como posso dividir um arquivo de texto em novos arquivos

3

Eu tenho um arquivo de texto no seguinte formato:

001|fileA
002|fileA
003|fileA
004|fileB
005|fileB
006|fileC
.
.
.
xxx|fileX

Eu preciso dividir este arquivo nos arquivos correspondentes a cada "|". Os nomes dos novos arquivos como fileA, fileB, fileC ... fileX.

    
por Watcharin Chimmachuy 16.06.2016 / 06:54

1 resposta

3

tente

 awk -F\| '{ print $1 > $2 ; }' file

onde

  • -F\| informa ao awk para usar | como separador | precisa ser escapado.
  • > $2 redirect print para o valor de $2 .

no caso de muitos arquivos (> 10):

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 meramente lista uniq filename
  • 52 arquivos estão OK, isso pode ficar lento se centenas de arquivos.

outra alternativa, campo fornecido é "seguro" para colocar no shell

awk -F\| '{printf "echo %s >> %s\n",$1,$2;}' file | bash
  • não se esqueça de excluir o arquivo X antes, em caso de nova execução.
por 16.06.2016 / 07:01