gpt4 book ai didi

linux - 如何在 Bash 中对字母数字字符串进行排序

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:33:56 25 4
gpt4 key购买 nike

我想根据文件名对文件列表进行排序。

输入

280900_b24.txt
280900_b23.txt
280900_b25.txt
280900_b28.txt
280900.txt
280900_b27.txt
280900_b22.txt
280900_b30.txt
280900_b29.txt
280902.txt
280902_b01.txt
280901_b08.txt
280901.txt
280900_b26.txt

预期输出

280902_b01.txt
280902.txt
280901_b08.txt
280901.txt
280900_b30.txt
280900_b29.txt
280900_b28.txt
280900_b27.txt
280900_b26.txt
280900_b25.txt
280900_b24.txt
280900_b23.txt
280900_b22.txt
280900.txt

我能得到的最接近的是 sort -r

280902.txt
280902_b01.txt
280901.txt
280901_b08.txt
280900.txt
280900_b30.txt
280900_b29.txt
280900_b28.txt
280900_b27.txt
280900_b26.txt
280900_b25.txt
280900_b24.txt
280900_b23.txt
280900_b22.txt

但我希望带有 _b# 的文件位于名称中不带 _b# 的文件之前。示例:我希望 280902_b01.txt 位于 280902.txt 之前。

最佳答案

我无法测试,但我相信你可以做到

 sort -k1.1,1.6r -k1.8,1.8 -k1.9r

然而,这会带来问题

 280900.txt
280900_b30.txt
280900_s30.txt

所以这样做可能会更好

 sort -k1.1,1.6r -k1.7,1.7 -k1.8r

后者更好,因为它对前 6 个字符进行反向排序,然后对第 7 个字符进行正常排序,以防第一个字符发生冲突。这解决了下划线点问题。最后,我们对余数进行反向排序。

关于linux - 如何在 Bash 中对字母数字字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52843715/

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