huge - Dividir archivo basado en el delimitador de cadenas en bash.how?
split on bash (3)
Blatantly robado de este foro :
awk ''/YOUR_TEXT_HERE/{n++}{print >"out" n ".txt" }'' final.txt
debería hacer el truco (reemplazando YOUR_TEXT_HERE
, por supuesto).
Sustituirlo por sus condiciones y enviar el resultado a #file.txt
con un archivo de entrada de a.txt
:
$ awk ''/coordinate1,coordinate2,value?/{n++}{print > n "file.txt" }'' a.txt $ ls 1file.txt 2file.txt 3file.txt a.txt $ cat 1file.txt coordinate1,coordinate2,value1 11111,a1,65 11111,a2,32 22222,b1,39 22222,b3,55 33333,c5,12 33333,c9,16 $ cat 2file.txt coordinate1,coordinate2,value2 54656,a1,65 21342,a2,32 23543,b1,39 123123,b3,55 568568,c5,12 568568,c9,16 123123,b3,55 568568,c5,12 568568,c9,16 $ cat 3file.txt coordinate1,coordinate2,value3 23543,b1,39 123123,b3,55 568568,c5,12 568568,c9,16 123123,b3,55 23543,b1,39 123123,b3,55 568568,c5,12 568568,c9,16 123123,b3,55 11111,a1,65 11111,a2,32 22222,b1,39 22222,b3,55 33333,c5,12 33333,c9,16
Esta pregunta ya tiene una respuesta aquí:
Tengo este archivo.csv:
coordinate1,coordinate2,value1
11111,a1,65
11111,a2,32
22222,b1,39
22222,b3,55
33333,c5,12
33333,c9,16
coordinate1,coordinate2,value2
54656,a1,65
21342,a2,32
23543,b1,39
123123,b3,55
568568,c5,12
568568,c9,16
123123,b3,55
568568,c5,12
568568,c9,16
coordinate1,coordinate2,value3
23543,b1,39
123123,b3,55
568568,c5,12
568568,c9,16
123123,b3,55
23543,b1,39
123123,b3,55
568568,c5,12
568568,c9,16
123123,b3,55
11111,a1,65
11111,a2,32
22222,b1,39
22222,b3,55
33333,c5,12
33333,c9,16
Ahora me gustaría dividir este archivo en 3 archivos, todos con un bloque de datos
Es: 1° file
coordinate1,coordinate2,value1
11111,a1,65
11111,a2,32
22222,b1,39
22222,b3,55
33333,c5,12
33333,c9,16
Es: 2° file
coordinate1,coordinate2,value2
54656,a1,65
21342,a2,32
23543,b1,39
123123,b3,55
568568,c5,12
568568,c9,16
123123,b3,55
568568,c5,12
568568,c9,16
Esta versión diferente de la otra respuesta también funciona con Windows CMD:
awk "/coordinate1,coordinate2,value?/{n++}{print>n/"file.txt/"}" a.txt
Puedes usar csplit:
csplit file.txt /^c.*/ {*}
Esta sintaxis funciona en cygwin pero no lo ha probado en ningún otro lado.