【发布时间】: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
我有这个文件:
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
这可能对你有用:
sort -uk1,1 file
这仅对第一个字段的文件进行排序,并根据第一个字段删除重复的行。
【讨论】:
-k1 从字段 1 到最后一个字段进行排序(如果有 5 列,则与 -k1,5 相同)。 -k1,1 仅对第一列进行排序。
根据第 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 列
【讨论】:
您可以将其通过管道传输到 awk:
sort -k1 file | awk '!($1 in a){a[$1]; print}'
hello 1
hi 3
world 1
【讨论】:
$1 是否存在于数组 a 中。如果它不存在,它会打印整行并将$1 填充到数组a 中。
-k1,1 表示在位置 1 开始和结束。