
Recientemente me encontré con un awkvistoopción. Puedo ver que está eliminando duplicados en archivos. Me vendría bien alguna aclaración sobre cómo funciona.
cat tes
1
2
3
1
1
1
3
4
con salida vista awk
cat tes | awk '!seen[$0]++'
1
2
3
4
Respuesta1
seen
es el nombre arbitrario de una matriz asociativa. No es una opción de ningún tipo. Podrías usar a
o b
o la mayoría de los otros nombres en su lugar.
El código !seen[$0]++
consta de una prueba y un incremento.
Si seen[$0]
, es decir, el valor del elemento de la matriz asociado con la clave $0
, la línea de entrada actual, es cero (o está vacía), entonces el valor booleano de !seen[$0]
esverdadero.
Luego se incrementa el valor en la matriz correspondiente a la clave $0
, lo que significa que la prueba seráFALSOtodas las demás veces que $0
se encuentre el mismo valor de.
El efecto es que la prueba esverdaderola primera vez que se ve una línea particular en la entrada, yFALSOtodos los demás tiempos.
Siempre que se realice una prueba sin acción asociadaverdadero, elpor defectose desencadena la acción. La acción predeterminada es el equivalente a { print }
o { print $0 }
, que imprime el registro actual, que para todas las cuentas y propósitos en este ejemplo es la línea de entrada actual sin modificar.