Tenho um arquivo file1
com a quantidade de vezes que um usuário aparece nos arquivos, mais ou menos assim:
4 userC
2 userA
1 userB
e tenho outro arquivo file2
com usuários e outras informações como:
userC, degree2
userA, degree1
userB, degree2
e quero uma saída onde mostre a quantidade de vezes que o usuário aparece, para cada grau:
5 degree2
2 degree1
Responder1
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
Ou você pode colocá-lo em um 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];
}
}
Primeiro defina o separador de campo como vírgula e espaço (que é o BEGIN
bloco ou a -F
opção de linha de comando.
Então, ao analisar o primeiro arquivo (o FNR == NR
idioma), coloque o número de conexões de um usuário em uma matriz indexada pelo nome do usuário. Ao analisar os arquivos a seguir, adicione o número de conexões de cada usuário à matriz indexada por grupo de usuários.
Finalmente (o END
bloco) escaneie todo o array e imprima os pares chave-valor.