【问题标题】:Count the frequency of a number in a file with awk用awk计算文件中数字的频率
【发布时间】:2013-04-26 21:20:16
【问题描述】:

我有以下文件:

1
1
2
3
3
3
4
4
5
5
5
5

我想计算一个数字出现了多少次,出现了多少次:例如,数字 1 出现 2 次,数字 2 出现 1 次,数字 3 出现 3 次,数字 4 出现 2 次5 四次;输出将是一个两列文件,其中第一列数字出现在列中的次数,第二列表示数字重复的次数,:

2 2  %(because the number 1 and number 4 appear 2 times and there are only 2 number that appear this often)
1 3
1 1
1 4

希望输出的示例文件能帮助理解...

【问题讨论】:

标签: awk


【解决方案1】:

uniq 需要排序输入,因为它只比较连续的行:

uniq -c

所以如果还没有排序:

sort | uniq -c

你给出的例子的输出是:

  2 1
  1 2
  3 3
  2 4
  4 5

【讨论】:

  • 它确实很重要,但它与 OP 想要的不匹配:2 2 因为 41 出现两次。
  • 同意,它不起作用。
【解决方案2】:

这一行应该会给你结果:

awk '{a[$0]++}END{for(x in a)b[a[x]]++;for(x in b)print b[x], x}' file

使用您的数据:

kent$  cat file
1
1
2
3
3
3
4
4
5
5
5
5

kent$  awk '{a[$0]++}END{for(x in a)b[a[x]]++;for(x in b)print b[x], x}' file
1 4
1 1
2 2
1 3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    相关资源
    最近更新 更多