awk -F '|' '$1 ~ /smiths/ {sum += $3} END {print sum}' inputfilename
- O
-F
sinalizador define o separador de campos; Coloquei-o entre aspas simples, porque é um caractere de shell especial.
- Em seguida,
$1 ~ /smiths/
aplica o seguinte {bloco de código} apenas às linhas em que o primeiro campo corresponde à regex /smiths/
.
- O resto é o mesmo que o seu código.
Observe que, como você realmente não está usando uma regex aqui, apenas um valor específico, você pode usar com a mesma facilidade:
awk -F '|' '$1 == "smiths" {sum += $3} END {print sum}' inputfilename
Que verifica a igualdade das strings. Isso é equivalente ao uso da regex /^smiths$/
, conforme mencionado em outra resposta, que inclui a ^
âncora para corresponder apenas ao início da sequência (o início do campo 1) e a $
âncora para corresponder apenas ao final da sequência. Não tenho certeza de como você está familiarizado com as expressões regulares. Eles são muito poderosos, mas, nesse caso, você pode usar uma verificação de igualdade de string com a mesma facilidade.
unzip -lv /appl/tmp/data.lar | grep documentlibrary | awk '{sum += $1} END {print sum/1024/1024}'
Outra abordagem é usar matrizes associativas awk, mais informações aqui . Esta linha produz a saída desejada:
Como efeito colateral, a matriz armazena todos os outros valores:
Resultado:
fonte
Muito bom até agora. Tudo que você precisa fazer é adicionar um seletor antes do bloco para adicionar a soma. Aqui, verificamos que o primeiro argumento contém apenas "ferreiros":
Você pode reduzir um pouco isso especificando o separador de campos como uma opção. Em
awk
que é geralmente uma boa idéia para inicializar variáveis na linha de comando:fonte
-F
opção para especificar o separador.$NF
é para "última coluna".fonte
cat
egrep
são desnecessários aqui./smiths/{...}
se a chamada grep não estiver lá. Essa é uma modificação trivial, mas oferece benefícios significativos: diminui o número de processos em execução, simplifica o controle de erros e torna o código mais claro.Pessoalmente, prefiro manter a
awk
seção o mais simples possível e fazer o máximo que puder sem ela. A lógica de Comingled não tira proveito do poder dos pipelines Unix e, portanto, é mais difícil de entender, depurar ou modificar para casos de uso intimamente relacionados.fonte