Суммирование по общим строкам в разных файлах

Суммирование по общим строкам в разных файлах

У меня есть файл 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блок) сканирует весь массив и выводит пары ключ-значение.

Связанный контент