2015-01-02 2 views
0

У меня есть файл в следующем форматеПеребор файл, пропуская пустые строки

value value 17 -1 1234 4567 value id1 
value value 17 -1 2345 4580 value id1 
value value 17 -1 2344 4654 value id1 

value value 1 1 1234 4567 value id2 
value value 1 1 3445 3455 value id2 

value value 1 1 2341 2345 value id3 
value value 1 1 1245 4567 value id3 
value value 1 1 3234 5634 value id3 
value value 1 1 3412 4512 value id3 

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

для, например, для id1:

17 -1 1234 4654 id1 

для id2:

1 1 1234 3455 id2 

i.e для каждого id (последний столбец) Я хотел бы получить 5-й столбец первой строки в этой группе и 6-й столбец последней строки в этой группе (строки сгруппированы по идентификаторам).

+0

Не могли бы вы сделать шаблон более явным? Есть 3 строки с 'id1' и 2 с 'id2'. Как соответствуют конечные примеры id1 и id2? – bsravanin

ответ

1

Нечто подобное может сделать работу для вас

$ awk '/^$/{print col3, col4, col5, col6, idval; next} $8 != idval{idval = $8; col3=$3; col4=$4; col5=$5} {col6=$6} END{print col3, col4, col5, col6, idval}' input 
17 -1 1234 4654 id1 
1 1 1234 3455 id2 
+0

Это сработало! Благодаря! – AishwaryaKulkarni

+0

@AishwaryaKulkarni Добро пожаловать :) Не стесняйтесь принять ответ;) – nu11p01n73R

1

С GNU awk

awk -vRS= -vFS='\n' '{split($1, a, /[[:blank:]]+/); 
split($NF, b, /[[:blank:]]+/); 
print a[3], a[4], a[5], b[6], a[8]}' file 
17 -1 1234 4654 id1 
1 1 1234 3455 id2 
1 1 2341 4512 id3 
+0

Вы хотите, чтобы вам нужно 'gnu' для' RS' без данных – Jotne

1

Вот еще awk

awk -vRS= '{print $3,$4,$5,$(NF-2),$8}' file 
17 -1 1234 4654 id1 
1 1 1234 3455 id2 
1 1 2341 4512 id3 

Этот разрыв каждый блок на одну запись, то поле печати 3,4,5 третьего и 8

+0

Я думаю, что это лучший способ +1, это gawk только, хотя, возможно, захочет упомянуть об этом :) –

+0

@Jidder Я знаю, что использование нескольких символов в 'RS' является опцией' gnu'. Но можете ли вы указать мне на документацию, что использование ничего не является «gnu». – Jotne

+0

'Почти все другие реализации awk20 хранят строки внутри, как строки C-стиля. Строки C используют символ NUL в качестве ограничителя строк. По сути, это означает, что «RS =« \ 0 »'совпадает с« RS = «». (d.c.) 'Итак, чтобы прочитать весь файл в виде одной записи на некоторых awks (я думаю, в любом случае). –