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), и $
привязку, чтобы соответствовать только концу строки. Не уверен, насколько вы знакомы с регулярными выражениями. Они очень мощные, но для этого случая вы можете использовать проверку на равенство строк так же легко.
unzip -lv /appl/tmp/data.lar | grep documentlibrary | awk '{sum += $1} END {print sum/1024/1024}'
Другой подход заключается в использовании ассоциативных массивов awk, подробнее здесь . Эта строка производит желаемый результат:
Как побочный эффект, массив хранит все другие значения:
Выход:
источник
Очень хорошо, пока. Все, что вам нужно сделать, это добавить селектор перед блоком, чтобы добавить сумму. Здесь мы проверяем, что первый аргумент содержит только «кузнецы»:
Вы можете сократить это, указав разделитель полей в качестве опции. В
awk
это вообще хорошая идея , чтобы инициализировать переменные в командной строке:источник
-F
Возможность указать разделитель.$NF
для "последнего столбца".источник
cat
иgrep
не нужны здесь./smiths/{...}
если вызов grep отсутствует. Это тривиальная модификация, но она дает значительные преимущества: уменьшает количество запущенных процессов, упрощает контроль ошибок и делает код более понятным.Я лично предпочел бы сохранить
awk
раздел как можно более простым и делать как можно больше без него. Логика Comingled не использует возможности конвейеров Unix и, следовательно, сложнее понять, отладить или изменить для тесно связанных случаев использования.источник