LINUX.ORG.RU

Отбор строк с одинаковыми полями

 ,


0

1

Привет, доброго всем.

Есть файл вида

abc;ghjk;123;5
abc;vbnm;123;10
def;dfghhjk;456;4
def;vbnmvm;456;7
def;adsds;456;5
...
много других таких же строк

Нужно со строками, имеющими одинаковые определенные поля (здесь $1 и $3), делать что нибудь. Например узнать сумму значений их поля $4: Значения полей заранее неизвестны, требуется лишь отобрать строки с одинаковыми определенными полями

abc;123;15
def;456;16

Сейчас я это делаю, ставя одинаковые определенные поля рядом

abc;123;ghjk;5
abc;123;vbnm;10
def;456;dfghhjk;4
def;456;vbnmvm;7
def;456;adsds;5
...
много других таких же строк

, вырезая этот кусок в файл образцов

abc;123
def;456
...
много других таких же строк

и производя такую операцию:

cat файл_с_образцам|while read образец;do grep образец файл_с_полями_рядом|awk -F';' 'сделать что-нибудь с нужным полем' ;done

Я хочу прекратить это безумие. Наверняка можно тем же awk или sed отбирать строки по нужным полям, но я не осилил. Прошу помощи.

{
	sum[$1,$3] += $4;
}
END { for( i in sum) {
		split(i, A, SUBSEP);
		print A[1] "-" A[2] "-" sum[i];
	}
}

имеем

def-456-16
abc-123-15
anonymous ()
Ответ на: комментарий от crutch_master

Так тоже извращался на больших объемах, когда баш затыкался от вышеприведенного.

rusya_rr ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.