独立计算多个字段中的值的出现次数(awk)

时间:2013-12-20 02:36:51

标签: awk

我已经看过很多帖子来为单个字段实现此任务,但我很难分别在多个字段上应用它。

输入:

group1|apple|orange|lemon
group1|apple|kiwi|banana
group1|orange|cherry| lemon
group1|apple|orange|pear

(真实文件有更多字段,所以我需要使用循环来处理每个字段)

输出:

Field|Fruit|Count
2|apple|3
2|orange|1
3|orange|2
3|kiwi|1
3|cherry|1
4|lemon|2
4|banana|1
4|pear|1

到目前为止我尝试了什么,但返回所有字段的整个计数:

awk '
    BEGIN{FS=OFS="|"; print "Field|Fruit|Count"}
    {
      for(i=2; i<=NF; i++){
        a[$i]=$i
        count[$i]++
      }
    }
    END{
      for(j in count) print j OFS count[j]
    }'

1 个答案:

答案 0 :(得分:3)

使用字段编号作为count数组中密钥的一部分。

awk '
    BEGIN{FS=OFS="|"; print "Field|Fruit|Count"}
    {
        for (i = 2; i <= NF; i++) {
            count[i OFS $i]++;
        }
    }
    END {
        for (j in count) {
            print j, count[j];
        }
    }'