awk -F '|' '$1 ~ /smiths/ {sum += $3} END {print sum}' inputfilename
-F
Прапор встановлює роздільник полів; Я розміщую це в одинарних лапках, тому що це особливий символ оболонки.
- Потім
$1 ~ /smiths/
застосовується наступний {код блоку} лише до рядків, де перше поле відповідає регексу /smiths/
.
- Решта - те саме, що і ваш код.
Зауважте, що оскільки ви насправді не використовуєте регулярний вираз, а саме певне значення, ви можете так само легко використовувати:
awk -F '|' '$1 == "smiths" {sum += $3} END {print sum}' inputfilename
Що перевіряє рівність рядків. Це еквівалентно використанню регулярного вираження /^smiths$/
, як згадується в іншій відповіді, яка включає в себе ^
якор, який відповідає лише початку рядка (початок поля 1), і $
якір повинен відповідати лише кінці рядка. Не знаєте, наскільки ви знайомі з регулярними виразами. Вони дуже потужні, але для цього ви можете так само легко використати перевірку рівності рядків.