2013-04-01 4 views
1

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

100 221 dog 
121 324 cat 
42 4341 fish 
12 23 cat 
2134 424 dog 

поэтому выход должен некоторые все числа из строки 1 и 2 для всех вхождений собаки, кошки и рыбы. smthg как

dog 2879 
cat 480 
fish 4383 
+0

Входной образец имеет 5 строк и 3 столбцов. Утверждение «У меня три строки» - неправильное использование слова «строка». –

ответ

4

попробовать этот один вкладыш:

awk '{a[$3]+=($1+$2)}END{for(x in a)print x, a[x]}' file 
0
awk ' 
{ 
    name[$3] += $1 + $2 
} 
END { for (n in name) { print n, name[n]; } } ' datafile 
+0

Зачем использовать int() для дополнений и завершающую полуточку на печати? –

+0

int() неверно для данного ответа. Полу-двоеточие - привычка для разделения нескольких утверждений. В этом случае это лишнее. – suspectus

+0

Получил это. Я думал, возможно, вызовы int() сделали что-то, чтобы гарантировать, что 'a + = b + c' ведет себя как' a + = (b + c) 'в отличие от' (a + = b) + c'. Я подозревал, что полуколонна была излишней. –

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