
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.