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), і $якір повинен відповідати лише кінці рядка. Не знаєте, наскільки ви знайомі з регулярними виразами. Вони дуже потужні, але для цього ви можете так само легко використати перевірку рівності рядків.