awk gawk

¿Por qué awk "not in" array funciona igual que awk "in" array?



gawk (4)

En mi solución para este problema, uso la siguiente instrucción if-else :

if($1 in contained);else{print "Here goes your code for /"not in/""}

Aquí hay un script awk que intenta establecer la diferencia de dos archivos según su primera columna:

BEGIN{ OFS=FS="/t" file = ARGV[1] while (getline < file) Contained[$1] = $1 delete ARGV[1] } $1 not in Contained{ print $0 }

Aquí está TestFileA:

cat dog frog

Aquí está TestFileB:

ee cat dog frog

Sin embargo, cuando ejecuto el siguiente comando:

gawk -f Diff.awk TestFileA TestFileB

Obtengo la salida como si el script hubiera contenido "in":

cat dog frog

Si bien no estoy seguro de si "no estar en" es sintaxis correcta para mi intento, tengo mucha curiosidad acerca de por qué se comporta exactamente de la misma manera que cuando escribí "en".


Me di cuenta de esto. La (x en la matriz) devuelve un valor, así que para hacer "no en la matriz", debes hacer esto:

if ( x in array == 0 ) print "x is not in the array"

o en tu ejemplo:

($1 in Contained == 0){ print $0 }


No estoy seguro de si esto es algo como lo que intentabas hacer.

#! /bin/awk # will read in the second arg file and make a hash of the token # found in column one. Then it will read the first arg file and print any # lines with a token in column one not matching the tokens already defined BEGIN{ OFS=FS="/t" file = ARGV[1] while (getline < file) Contained[$1] = $1 # delete ARGV[1] # I don''t know what you were thinking here # for(i in Contained) {print Contained[i]} # debuging, not just for sadists close (ARGV[1]) } { if ($1 in Contained){} else { print $1 } }


No puedo encontrar ningún doc sobre el element not in array .

!(element in array) Intenta !(element in array) .

Supongo que: awk not ve como una variable no inicializada, por lo que not se evalúa como una cadena vacía.

$1 not == $1 "" == $1