![como funciona a opção awk visto](https://rvso.com/image/178502/como%20funciona%20a%20op%C3%A7%C3%A3o%20awk%20visto%20.png)
Recentemente me deparei com um awkvistoopção. Posso ver que está removendo duplicatas em arquivos. Eu poderia usar alguns esclarecimentos sobre como funciona.
cat tes
1
2
3
1
1
1
3
4
com awk visto saída
cat tes | awk '!seen[$0]++'
1
2
3
4
Responder1
seen
é o nome arbitrário de uma matriz associativa. Não é uma opção de qualquer tipo. Você poderia usar a
ou b
ou a maioria dos outros nomes em seu lugar.
O código !seen[$0]++
consiste em um teste e um incremento.
Se seen[$0]
, ou seja, o valor do elemento da matriz associado à chave $0
, a linha atual de entrada, for zero (ou vazio), então o valor booleano de !seen[$0]
éverdadeiro.
O valor no array correspondente à chave $0
é então incrementado, o que significa que o teste seráfalsotodas as outras vezes em que o mesmo valor de $0
é encontrado.
O efeito é que o teste éverdadeiroa primeira vez que uma linha específica é vista na entrada, efalsotodas as outras vezes.
Sempre que um teste sem ação associada forverdadeiro, opadrãoação é acionada. A ação padrão é equivalente a { print }
ou { print $0 }
, que imprime o registro atual, que para todas as contas e propósitos neste exemplo é a linha de entrada atual não modificada.