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.> $2
redirigir la impresión al$2
valor 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.