Shell-Script

通過不同文件中的公共字元串求和

  • October 11, 2014

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

4 userC
2 userA
1 userB

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

userC, degree2
userA, degree1
userB, degree2

我想要一個輸出,它顯示使用者出現的次數,每個學位:

5 degree2
2 degree1

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塊)掃描整個數組並列印鍵值對。

引用自:https://unix.stackexchange.com/questions/160580