按不同文件中的公共字串求和

按不同文件中的公共字串求和

我有一個文件file1,其中包含用戶在文件中出現的次數,如下所示:

4 userC
2 userA
1 userB

我還有另一個file2包含使用者和其他資訊的文件,例如:

userC, degree2
userA, degree1
userB, degree2

我想要一個輸出,其中顯示每個等級使用者出現的次數:

5 degree2
2 degree1

答案1

純的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

或者您可以將其放入這樣的腳本中:

#!/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];
    }
}

首先將欄位分隔符號設定為逗號和空格(即BEGIN區塊或-F命令列選項)。

然後,在解析第一個檔案(FNR == NR習慣用法)時,將使用者的連線數放入按使用者名稱索引的陣列中。解析下列檔案時,將每個使用者的連線數新增至按使用者群組索引的陣列中。

最後(END區塊)掃描整個陣列並列印鍵、值對。

相關內容