Ich habe eine Datei file1
mit der Häufigkeit, mit der ein Benutzer in den Dateien auftaucht, ungefähr so:
4 userC
2 userA
1 userB
und ich habe eine weitere Datei file2
mit Benutzern und anderen Informationen wie:
userC, degree2
userA, degree1
userB, degree2
und ich möchte eine Ausgabe, die für jeden Grad die Häufigkeit anzeigt, mit der der Benutzer erscheint:
5 degree2
2 degree1
Antwort1
Rein 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
Oder Sie können es in ein Skript wie dieses einfügen:
#!/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];
}
}
Legen Sie zunächst als Feldtrenner Komma und Leerzeichen fest (das ist der BEGIN
Block oder die -F
Befehlszeilenoption).
Wenn Sie dann die erste Datei (das FNR == NR
Idiom) analysieren, fügen Sie die Anzahl der Verbindungen für einen Benutzer in ein Array ein, das nach Benutzernamen indiziert ist. Wenn Sie die folgenden Dateien analysieren, fügen Sie die Anzahl der Verbindungen für jeden Benutzer in das Array ein, das nach Benutzergruppe indiziert ist.
Schließlich END
scannt (der Block) das gesamte Array und druckt die Schlüssel-Wert-Paare aus.