¿Cómo comparar dos columnas de dos archivos csv con awk?
Tengo dos archivos csv que necesito comparar con una columna.
Mi member.csvarchivo se ve así:
ID|lastName|firstName
01|Lastname01|Firstname01
02|Lastname02|Firstname02
El segundo archivo se check-ID.csvparece a:
Lastname01|Name01|pubID01|Hash01
Lastname02|Name02|pubID02|Hash02a
Lastname03|Name03|pubID03|Hash03
Lastname02|Name02|pubID02|Hash02b
Lastname01|Name01|pubID01|Hash01b
-> Lastname03no esta en mi member.csv!
Lo que quiero es verificar si el valor de la primera columna de check-ID.csves igual al valor de la segunda columna en member.csv.
Mi intento con script.awkes
NR==FNR{a[$1]=$1; b[$1]=$0; next}
$2==a[$1]{ delete b[$1]}
END{for (i in b ) print b[i]}
ejecutando con
awk -f script.awk check-ID.csv member.csv
El problema es que el resultado no se filtra.
Me gusta obtener una salida filtrada y ordenada, por lo que solo los miembros se enumeran así:
Lastname01|Name01|pubID01|Hash01
Lastname01|Name01|pubID01|Hash01b
Lastname02|Name02|pubID02|Hash02a
Lastname02|Name02|pubID02|Hash02b
¡Cualquier ayuda apreciada!
Respuestas
¿Podría intentar seguirlo? Creo que estuvo cerca, lo único que podría cambiar es la secuencia de lectura de Input_files. Donde estoy leyendo membersInput_file primero y luego check-ID.csvporque luego Input_file tiene todos los detalles que deben imprimirse y solo necesitamos verificar el segundo campo de los miembros Input_file.
awk '
BEGIN{
FS="|"
}
FNR==NR{
a[$2] next } ($1 in a)
' members.csv check-ID.csv |
sort -t'|' -k1
Explicación: agregando una explicación detallada de lo anterior.
awk ' ##Starting awk program from here.
BEGIN{ ##Starting BEGIN section of this program from here.
FS="|" ##Setting field separator as | here.
}
FNR==NR{ ##Checking condition if FNR==NR which will be TRUE when first Input_file named members.csv is being read.
a[$2] ##Creating array a with index 2nd field here. next ##next will skip all further statements from here. } ($1 in a) ##Checking condition if 1st field is preent in a then print that line.
' members.csv check-ID.csv | ##Mentioning Input_file names here and sending its output to sort command.
sort -t'|' -k1 ##Sorting output(which we got from awk command above) by setting separator as | and by first field.