【问题标题】:Count unique values from a column of a random file by shell command通过 shell 命令计算随机文件列中的唯一值
【发布时间】:2014-12-27 05:36:27
【问题描述】:

我有一个名为c01_1_664_blastx.blast 的文件。它的内容如下

c1_g1_i1    sp|P87048|RPN1_SCHPO    63.83   47      16      1       20      160     840     885     5e-09   57.9
c3_g1_i1    sp|Q6DCX2|AGO2_XENLA    58.02   131     45      3       567     199     733     861     3e-61     149
..................
...................
...................

我需要通过 shell 命令计算第一列 (c1_g1_i1, c3_g1_i1) 中唯一值的数量。谁能帮我这个? 提前谢谢..干杯

【问题讨论】:

  • 你的预期输出是什么?
  • 对于上面的例子,输出应该是2
  • 是的,因为列值不同(c3_g1_i1c1_g1_i1)。

标签: shell


【解决方案1】:
cut -d' ' -f 1  input_file | sort | uniq | wc -l

您可以使用cut 指定分隔符和要提取的字段。提取第一个字段后,您 sort 它然后应用 uniq 以获取唯一条目并通过将其传递给 wc 来计算此类条目的数量。请注意,您可以使用uniq -c 来计算每个唯一条目出现的次数。

【讨论】:

    【解决方案2】:

    您不需要多个管道命令。单个awk 可以处理这个:

    awk '!seen[$1]++{} END{print length(seen)}' file
    2
    

    或者:

    awk '!seen[$1]++{i++} END{print i}' file
    

    此 awk 命令维护一个关联数组 seen 以仅保存唯一值,并且在 END 部分中它仅打印数组的长度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      相关资源
      最近更新 更多