2009-12-01 4 views
9

У меня есть этот FILE.CSV:Разделить файл на основе разделителя строк в bash.how?

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 

Теперь я хотел бы разделить этот файл в 3-х файлов, каждый йота только блок данных

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 

ответ

16

Грубо угнанных из this forum:

awk '/YOUR_TEXT_HERE/{n++}{print >"out" n ".txt" }' final.txt 

должен сделать трюк (заменяя YOUR_TEXT_HERE, конечно).

Замены его с условиями и отправка вывода #file.txt с входным файлом 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 
+0

Я пробовал этот пример. Я получаю следующую ошибку: awk: синтаксическая ошибка в исходной строке 1 context is \t/coord1, coord2, value?/{N ++} {print> n >>> "file.txt" <<< –

+0

@RaffiKhatchadourian Какая версия из awk вы использовали? – Armali

+0

@Armali awk version 20070501 –

1

Это по-разному цитирует версия другого ответа также работает с Windows, CMD:

awk "/coordinate1,coordinate2,value?/{n++}{print>n\"file.txt\"}" a.txt 
3

Вы можете использовать csplit:

csplit file.txt /^c.*/ {*} 

Эта синхронизация x работает на cygwin, но не пробовал его.

Смежные вопросы