log huge example bash file split

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.