2013-09-19 6 views
2

У меня есть проблема, которая, безусловно, может быть решена с помощью однострочного awk.Извлечение блока данных из файла

Я хочу разбить существующий файл данных, который состоит из блоков данных в отдельные файлы. файл данных имеет следующий вид:

1 1 
1 2 
1 3 


2 1 
2 2 
2 3 

3 1 
3 2 
3 3 

И я хочу, чтобы хранить каждый блок данных в отдельном файле, с именем - например - «1.dat», «.dat», «3.dat ", ... Проблема состоит в том, что каждый блок не имеет определенного номера строки, они просто ограничены двумя« новыми строками ».

Спасибо заранее, Jürgen

+0

Смотрите также [csplit] (http://linux.die.net/man/1/csplit). – tripleee

ответ

4

Это поможет вам начать:

awk '{ print > ++i ".dat" }' RS= file.txt 

Если два "новых линий" вы имеете в виду, два перевода строки:

awk '{ print > ++i ".dat" }' RS="\n\n" file.txt 

Посмотрите, как результаты отличаются? Установка нулевого значения RS (т. Е. Первый пример), вероятно, является тем, что вы ищете.

+1

Thx очень много! Это именно то, что я искал! :) – user2795836

1

Другой подход:

awk 'NF != 0 {print > $1 ".dat"}' file.txt 
Смежные вопросы