¿Cómo puedo dividir un archivo de texto en archivos nuevos?

¿Cómo puedo dividir un archivo de texto en archivos nuevos?

Tengo un archivo de texto en el siguiente formato:

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

Necesito dividir este archivo en los archivos correspondientes a cada "|". Los nombres de archivos nuevos como archivoA, archivoB, archivoC...archivoX.

Respuesta1

intentar

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

dónde

  • -F\|decirle a awk que lo use |como separador, | hay que escapar.
  • > $2redirigir la impresión al $2valor de.

en caso de muchos (> 10) archivos:

for x in $(awk -F\| '!a[$2]++ { print $2}' file)
do
    awk -F\| -v f="$x" '$2 == f { print $1}' file > "$x"
done
  • El primer awk simplemente enumera el nombre de archivo Uniq.
  • 52 archivos están bien, esto puede volverse lento si hay cientos de archivos.

Otra alternativa, siempre que los campos sean "seguros" para colocarlos en el shell.

awk -F\| '{printf "echo %s >> %s\n",$1,$2;}' file | bash
  • asegúrese de eliminar fileX antes, en caso de volver a ejecutarlo.

información relacionada