como isso funciona no awk mesmo sem impressão?

0
bash-3.00# cat > b1.txt
AAA,Apples,123
BBB,Bananas,124
CCC,Carrot,125
bash-3.00# cat > b2.txt
Store1|AAA|123|11
Store2|BBB|124|23
Store3|CCC|125|57
Store4|DDD|126|38
bash-3.00# awk -F"[,|]" 'NR==FNR{a[$1]++;next} !a[$2]' b1.txt b2.txt
Store4|DDD|126|38

Quando NR==FNR retorna verdadeiro para o primeiro arquivo a[$1] é incrementado. next traz de volta ao início do script. Mas o que é !a[$2] fazendo aqui? Como ele imprime sem um comando print ?

    
por munish 27.11.2012 / 17:58

2 respostas

5

Do POSIX awk spec :

An awk program is composed of pairs of the form:

pattern { action }

Either the pattern or the action (including the enclosing brace characters) can be omitted. ... [A] missing action shall be equivalent to:

{ print }

No seu caso, !a[$2] é o padrão e a ação está ausente.

    
por 27.11.2012 / 18:03
0

Para expandir a resposta anterior:

awk manipula os testes verdadeiro / falso numericamente; 0 é "falso" e qualquer outro número é "verdadeiro". O exclam ( ! ) inverte o teste.

Portanto, !a[$1] é essencialmente equivalente a dizer "imprima se a[$1] for igual a 0".

    
por 01.04.2016 / 03:38

Tags