/ / compare dos columnas de diferentes tablas y agregue valores para hacer coincidir las filas con el primer archivo - awk

compare dos columnas de diferentes tablas y agregue valores para hacer coincidir las filas con el primer archivo - awk

Estoy tratando de agregar contraseñas de texto plano a las filas correspondientes en una tabla de usuarios exportados. Tengo dos archivos:

utilizable

    barry  hash1
fred   hash2
mary   hash3
rich   hash2

crackpasstable

    ptpass1 hash1
ptpass2 hash2

Quiero que la salida se vea como:

mesa combinada

    barry  hash1  ptpass1
fred   hash2  ptpass2
mary   hash3
rich   hash2  ptpass2

He probado el siguiente código basado en otra entrada que encontré, pero esto solo imprime las filas que tienen coincidencias, no todas:

$ awk "NR==FNR{a[$2]=$0; next} a[$2]>0{print a[$2],$1}" usertable crackpasstable > combinedtable

Quiero intentar imprimir todas las filas en la tabla de usuario (con suerte en el orden original) y simplemente agregar las contraseñas coincidentes en una nueva columna si fui capaz de descifrarlas.

Gracias

Respuestas

0 para la respuesta № 1

pr.awk:

# Usage:
# awk -f pr.awk crackpasstable usertable > combintedtable

BEGIN {
ct = ARGV[1]
ARGV[1] = "" # read ARGV[1] file implicitly, ARGV[2] file
# explicitly
while (getline < ct > 0) {
p = $1
h = $2
phash[h] = p
}
}

{
h = $2
if (h in phash)
print $0 "  " phash[h]
else
print
}

0 para la respuesta № 2

casi tienes razón leer en crackpasstable, luego escanear usertable y añadir pase desde el archivo cargado

# read in the first file
FNR == NR {
hashes [$2] = $1 # hopefully, there are no repeating hash values
next
}

# scan all other files
$2 in hashes {
$0 = $0 "t" hashes[$2]
}

1 # or {print} if you prefer to be explicit

USO:

> ThisScript crackpasstable usertable

0 para la respuesta № 3

o

awk "NR==FNR {a[$2]=$1;next} {print ($2 in a) ? $0"t"a[$2] : $0}" crackpasstable usertable