如何计算重复数据的频率?

时间:2015-01-13 16:18:12

标签: awk count

我需要帮助确定如何计算文件中重复信息的频率。例如:

0
0
14
14
10
10
10

在这里,我希望有一个UNIX命令告诉我有多少次重复2次,并告诉我在一个文件中有多少次重复超过2次。

例如,此命令将使用上述数据并产生一个输出,告诉我文件中有2个唯一的数字重复2次(数据集中每次重复2次0和14)以及重复的1个唯一数字文件中超过2次(10次在数据集中出现两次以上)。

2 个答案:

答案 0 :(得分:1)

如果你只是想知道有两个出现两次的数字和一个出现三次的数字:

sort file | uniq -c | awk '{print $1}' | sort | uniq -c
  2 2
  1 3

如果你想知道这些数字是什么,我会使用perl:

perl -lne '
        $n{$_}++
    } END {
        push @{$aggregate{$n{$_}}}, $_ for keys %n; 
        $,="\t"; 
        print $_, scalar(@{$aggregate{$_}}), join(",",@{$aggregate{$_}}) for keys %aggregate
' file

输出

3   1   10
2   2   0,14

答案 1 :(得分:0)

$ cat tst.awk
{ cnt[$0]++ }
END {
    for (key in cnt)
        hits[cnt[key]]++

    for (c in hits)
        print hits[c], c
}
$
$ awk -f tst.awk file
2 2
1 3

广告,如果您想知道哪些值与哪些值相关联:

$ cat tst.awk
{ cnt[$0]++ }
END {
    for (key in cnt) {
        c = cnt[key]
        hits[c]++
        vals[c] = (c in vals ? vals[c] "," : "") key
    }

    for (c in hits)
        print hits[c], c, vals[c]
}
$
$ awk -f tst.awk file
2 2 0,14
1 3 10