【问题标题】:uniq -c unable to count unique linesuniq -c 无法计算唯一行
【发布时间】:2015-12-29 18:03:37
【问题描述】:

我正在尝试计算文本文件第 3 列中数字的唯一出现次数,这是一个非常简单的命令:

awk 'BEGIN {FS = "\t"}; {print $3}' bisulfite_seq_set0_v_set1.tsv | uniq -c

应该是这样的

1 10103
2 2093
3 109

而是提出了废话,其中多次计算相同的数字,例如

 20 1
  1 2
  1 1
  1 2
 14 1
  1 2

我也试过

 awk 'BEGIN {FS = "\t"}; {print $3}' bisulfite_seq_set0_v_set1.tsv | sed -e 's/ //g' -e 's/\t//g' | uniq -c

我已经尝试了 uniq 手册页中我能想到的所有组合。如何使用 uniq 正确计算数字的唯一出现次数?

【问题讨论】:

    标签: shell awk uniq


    【解决方案1】:

    uniq -c 计算连续重复。要计算它们,您需要先对其进行排序。但是,对于 awk,您不需要这样做。

    $ awk '{count[$3]++} END{for(c in count) print count[c], c}' file 
    

    会的

    【讨论】:

    • 只是为了澄清:awk 'BEGIN {FS = "\t"}; {count[$3]++} END{for(c in count) print count[c], c}' bisulfite_seq_set0_v_set1.tsv
    • 如果您的字段没有空格,则无需将 FS 显式设置为制表符。 awk 默认处理。
    【解决方案2】:

    awk-带有cutsortuniq的免费版本:

    cut -f 3 bisulfite_seq_set0_v_set1.tsv | sort | uniq -c
    

    uniq 对相邻匹配行进行操作,因此必须先对输入进行排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-19
      • 2015-01-03
      • 2016-07-01
      • 2011-05-07
      • 1970-01-01
      相关资源
      最近更新 更多