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