【问题标题】:Sorting unique by column - sort command?按列排序唯一 - 排序命令?
【发布时间】:2014-09-09 03:25:48
【问题描述】:

我有这个文件:

hello 1
hello 2
world 1
world 2
hello 3
hi    3
hi    4

我想这样排序,

hello 1
hi  3
world 1

问题是我只需要第 1 列中的第一个唯一项。

我尝试了sort -k1 -u file.txt,但它没有按我的预期工作。我该怎么办?

【问题讨论】:

标签: linux bash shell unix sorting


【解决方案1】:

这可能对你有用:

sort -uk1,1 file

这仅对第一个字段的文件进行排序,并根据第一个字段删除重复的行。

【讨论】:

  • 你能解释一下吗?
  • -k1 从字段 1 到最后一个字段进行排序(如果有 5 列,则与 -k1,5 相同)。 -k1,1 仅对第一列进行排序。
【解决方案2】:

根据第 1 列排序并给出唯一列表

排序 -u -t : -k 1,1 test.txt

-t : = 冒号是分隔符

-k 1,1 = 基于第 1 列

根据第 1 列和第 3 列排序并给出唯一列表

排序 -u -t : -k 1,1 -k 3,3 test.txt

-t : = 冒号是分隔符

-k 1,1 3,3 = 基于第 1 列和第 3 列

【讨论】:

    【解决方案3】:

    您可以将其通过管道传输到 awk:

    sort -k1 file | awk '!($1 in a){a[$1]; print}'
    hello 1
    hi    3
    world 1
    

    【讨论】:

    • 你能解释一下上面的解决方案吗
    • awk 命令检查 $1 是否存在于数组 a 中。如果它不存在,它会打印整行并将$1 填充到数组a 中。
    • 为什么 sort -k1 -u file.txt 不起作用?基本上,我们本身就是根据第一列对重复项进行排序和删除,对吧?
    • -k1,1 表示在位置 1 开始和结束。
    猜你喜欢
    • 2021-11-21
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 2016-07-19
    • 2012-04-30
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    相关资源
    最近更新 更多