На основе ответа Aydin я бы предложил менее «дублирующую» реализацию (потому что мы могли бы легко получить Type
из самого значения Enum
, а не предоставлять его как параметр
Не могли бы вы попробовать следующее, это должно дать вам ответ в определенном порядке 1-го и 2-го поля, в котором они присутствуют в Input_file, без использования какого-либо конкретного параметра из awk
.
awk '
BEGIN{
FS=OFS=SUBSEP=","
}
FNR==1{
print [110],"total_count,equal_to_3_values,more_than_3_values"
next
}
!a[$1,$2]++{
b[++count]=$1 FS $2
}
{
c[$1,$2]++
d[$1,$2]=$3>0?++d[$1,$2]:d[$1,$2]?d[$1,$2]:0
e[$1,$2]=$3==0?++e[$1,$2]:e[$1,$2]?e[$1,$2]:0
}
END{
for(i=1;i<=count;i++){
print b[i],c[b[i]],d[b[i]],e[b[i]]
}
}' Input_file
Вывод будет следующим.
col1,col2,total_count,equal_to_3_values,more_than_3_values
a,x,2,1,1
b,y,2,1,1
b,x,1,1,0
a,y,1,0,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