Summieren nach gemeinsamen Zeichenfolgen in verschiedenen Dateien

Summieren nach gemeinsamen Zeichenfolgen in verschiedenen Dateien

Ich habe eine Datei file1mit 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 file2mit 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 BEGINBlock oder die -FBefehlszeilenoption).

Wenn Sie dann die erste Datei (das FNR == NRIdiom) 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 ENDscannt (der Block) das gesamte Array und druckt die Schlüssel-Wert-Paare aus.

verwandte Informationen