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

На основе ответа Aydin я бы предложил менее «дублирующую» реализацию (потому что мы могли бы легко получить Type из самого значения Enum, а не предоставлять его как параметр

0
задан cartman619 16 January 2019 в 09:38
поделиться

2 ответа

Не могли бы вы попробовать следующее, это должно дать вам ответ в определенном порядке 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
0
ответ дан RavinderSingh13 16 January 2019 в 09:38
поделиться

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

$ 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
0
ответ дан James Brown 16 January 2019 в 09:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: