Tengo un archivo file1
con la cantidad de veces que aparece un usuario en los archivos, algo como esto:
4 userC
2 userA
1 userB
y tengo otro archivo file2
con usuarios y otra información como:
userC, degree2
userA, degree1
userB, degree2
y quiero un resultado donde muestre la cantidad de veces que aparece el usuario, para cada grado:
5 degree2
2 degree1
Respuesta1
Puro awk
:
$ awk -F'[, ]' 'NR==FNR{n[$2]=$1;next}{m[$3]+=n[$1]}
END{for(i in m){print i " " m[i]}}' \
file1 file2
degree1 2
degree2 5
O puedes ponerlo en un script como este:
#!/usr/bin/awk -f
BEGIN {
FS="[, ]"
}
{
if (NR == FNR) {
n[$2] = $1;
next;
} else {
m[$3] += n[$1];
}
}
END {
for (i in m) {
print i " " m[i];
}
}
Primero establezca el separador de campo en coma y espacio (es decir, el BEGIN
bloque o la -F
opción de línea de comando).
Luego, al analizar el primer archivo (el FNR == NR
modismo), coloque el número de conexiones para un usuario en una matriz indexada por nombre de usuario. Al analizar los siguientes archivos, agregue la cantidad de conexiones para cada usuario en la matriz indexada por grupo de usuarios.
Finalmente (el END
bloque) escanea toda la matriz e imprime los pares clave-valor.