【问题标题】:using Linux cut, sort and uniq使用 Linux cut、sort 和 uniq
【发布时间】:2014-03-02 07:48:36
【问题描述】:

我有一个包含人口、年份和县的列表,我需要剪切列表,然后找到 uniq 县的数量。

列表是这样开始的:

#Population,    Year,   County
3900,   1969,   Beaver
3798,   1970,   Beaver
3830,   1971,   Beaver
3864,   1972,   Beaver
3993,   1973,   Beaver
3976,   1974,   Beaver
4064,   1975,   Beaver

这个列表还有很多,还有更多的县。我必须切出县列,对其进行排序,然后输出 uniq 县的数量。我试过这个命令:

 cut -c3- list.txt | sort -k3 | uniq -c

但这并没有删除第三个列表,也没有按字母顺序排序。我做错了什么?

【问题讨论】:

    标签: linux sorting cut uniq


    【解决方案1】:

    您可以添加分隔符,在您的情况下是逗号:

    cut -f 3 -d, list.txt | sort | uniq
    

    那么,-c 指定 字符 位置,而不是用-f 指定的字段。

    要去除前面的空格,您可以将其全部通过管道,例如awk '{print $1}',即

    cut -f 3 -d, list.txt | awk '{print $1}' | sort | uniq
    

    [编辑]

    啊啊啊。如果您尝试cut 第三个字段,则在管道之后只剩下一个字段,因此对第三个字段进行排序将不起作用,这就是我在示例中省略它的原因。您得到 1 个字段,您只需对其进行排序并应用 uniq

    【讨论】:

    • 很酷,谢谢。如果我想打印带有结果的行号,我该怎么做?
    • awk版本中,可以直接输出第三个字段(即不需要cut这一步)...
    • @user2615699 不确定您要什么...尝试添加|cat -n
    【解决方案2】:

    您可以使用 awk 提取第三个字段(空格分隔),然后进行排序/uniq 操作。

    awk '{print $3}' list.txt |sort |uniq -c
    

    【讨论】:

      猜你喜欢
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 2013-02-08
      • 1970-01-01
      • 2011-10-27
      相关资源
      最近更新 更多