gpt4 book ai didi

linux - unix 仅按单列排序

转载 作者:太空宇宙 更新时间:2023-11-04 09:10:28 26 4
gpt4 key购买 nike

我有一个用逗号分隔的数字文件。我只想按第 2 列对列表进行排序。我的期望是,行将仅按第二列排序,而不按其他列排序。我不想按多个键排序。我知道如何按一个键排序。我的问题是,为什么当我将开始 POS 和结束 POS 作为第 2 列时,为什么还要对第 3 列进行排序?

文件

cat chris.num
1,5,2
1,4,3
1,4,1
1,7,2
1,7,1

排序后

sort -t',' -k2,2 chris.num
1,4,1
1,4,3
1,5,2
1,7,1
1,7,2

但是我的预期输出是

1,4,3
1,4,1
1,5,2
1,7,2
1,7,1

所以我认为,因为我将开始和结束键指定为 -k2,2,它只会根据此列进行排序,但它似乎也在对其他列进行排序。我怎样才能让它只按第 2 列而不按其他列排序

最佳答案

来自 sort 的 POSIX 描述:

Except when the -u option is specified, lines that otherwise compare equal shall be ordered as if none of the options -d, -f, -i, -n, or -k were present (but with -r still in effect, if it was specified) and with all bytes in the lines significant to the comparison. The order in which lines that still compare equal are written is unspecified.

因此在您的情况下,当两行在第二列中具有相同的值并因此相等时,然后比较整行以获得最终排序。

GNU sort(可能还有其他实现,但它不是 POSIX 强制要求的)对 stable sort-s 选项其中具有比较相等的键的行以与原始顺序相同的顺序出现,这就是您想要的:

$ sort -t, -s -k2,2n chris.num
1,4,3
1,4,1
1,5,2
1,7,2
1,7,1

关于linux - unix 仅按单列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57417763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com