Скрипт awk для подсчета записей на основе нескольких условий

У меня есть файл с 3 столбцами, как показано ниже

col1,col2
a,x,1
b,y,2
a,x,0
b,x,2
b,y,0
a,y,0

Я работаю над сценарием awk, чтобы получить следующий вывод: (сгруппированы по col1 и col2 и подсчитывает общее, условие1, условие2)

col1,col2,total count,count where col3=0, count where col3>0
a,x,2,1,1
a,y,1,1,0
b,x,1,0,1
b,y,2,1,1

Я разработал скрипт для получения всех 3 отдельно, используя следующую команду:

for case 3 : col3>0
awk -F',' '($3>0)NR>1{arr[$1","$2]++}END{for (a in arr) print a, arr[a]}' file 

Аналогичная команда и для другого случая.

Я не могу создать команду/скрипт, чтобы решить все 3 случая за один раз.

Любая помощь приветствуется.

П.С .: Этот пример файла небольшой, поэтому я могу запустить 3 сценария/команду и присоединиться к ним, но для реального файла он слишком большой, чтобы запускать его 3 раза.

0
de

1 ответы

Вот один из них:

$ awk '
BEGIN {                        
    FS=OFS=","                 # field separators
}
NR>1 {                         # after header
    k=$1 OFS $2                # set the key
    a[k]++                     # total count of unique $1 $2
    b[k]+=($3==0)              # count where $3==0
    c[k]+=($3>0)               # count where $3>0
}
END {                          # after all processing is done
    for(i in a)                # output values
        print i,a[i],b[i],c[i]
}' file

Вывод (в случайном порядке, но это можно исправить с помощью подсказки @ Inian в комментариях):

a,y,1,1,0
b,x,1,0,1
b,y,2,1,1
a,x,2,1,1
2
добавлено
Единственная недостающая часть из моего - это PROCINFO ["sorted_in"] = "@ind_str_asc" в END , чтобы получить тот же отсортированный вывод
добавлено автор Inian, источник