awk '{a += $1; b += $2} END { print a " " b }' foo.log
(Обратите внимание на полное отсутствие проверки ошибок.)
РЕДАКТИРОВАТЬ:
Хорошо, вот версия с проверкой ошибок:
awk 'BEGIN { ok = 1 } { if (/^ *[0-9]+ +[0-9]+ *$/) { a += $1; b += $2 } else { ok = 0; exit 1 } } END { if (ok) print a, b }' foo.log
Если вы не хотите принимать начальные или конечные пробелы, удалите два " *"
в операторе if.
Но это достаточно много, чтобы, вероятно, не быть единичнымliner:
#!/usr/bin/awk -f
BEGIN {
ok = 1
}
{
if (/^ *[0-9]+ +[0-9]+ *$/) {
a += $1
b += $2
}
else {
ok = 0
exit 1
}
}
END {
if (ok) print a, b
}
По-прежнему нет проверки переполнения или недостаточного заполнения, и предполагается, что признаков не будет.Последнее достаточно легко исправить;первое будет сложнее.(Обратите внимание, что awk использует внутреннее число с плавающей точкой; если сумма достаточно велика, она может спокойно потерять точность.)