在Bash中用数字对字符串进行排序[重复]
Posted
技术标签:
【中文标题】在Bash中用数字对字符串进行排序[重复]【英文标题】:Sorting strings with numbers in Bash [duplicate] 【发布时间】:2013-06-08 08:32:23 【问题描述】:我经常想对带有数字的字符串进行排序,以便在排序时,例如abc_2, abc_1, abc_10
结果是 abc_1, abc_2, abc_10
。我见过的每一种排序机制都是abc_1, abc_10, abc_2
,即从左边逐个字符。
有没有什么有效的方法来排序以获得我想要的结果?查看每个字符,确定它是否是数字,从后续数字构建子字符串并将其作为数字排序的想法太可怕了,无法在 bash
中考虑。
没有大胡子 *nix 大师实现了带有 --sensible_numerical
选项的 sort
的替代版本吗?
【问题讨论】:
你的前缀总是一样的吗? 【参考方案1】:执行这个
sort -t _ -k 2 -g data.file
-t 分隔符
-k 键/列
-g 通用数字排序
【讨论】:
他需要按数字排序 - 这是第二个字段:printf "abc_2\nabc_1\nabc_10\n" | sort -t _ -k 2 -g
@RomanNewaza,谢谢!你知道,零也是一个数字。 :-)
这不是从零开始的。查看手册页。【参考方案2】:
我认为这是sort
的GNU 扩展,但您正在寻找--version-sort
(或-V
)选项:
$ printf "prefix%d\n" $(seq 10 -3 1)
prefix10
prefix7
prefix4
prefix1
$ printf "prefix%d\n" $(seq 10 -3 1) | sort
prefix1
prefix10
prefix4
prefix7
$ printf "prefix%d\n" $(seq 10 -3 1) | sort --version-sort
prefix1
prefix4
prefix7
prefix10
https://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html
【讨论】:
唉,这个选项还没有在我正在开发的 RHEL 的老年版本上可用的老版本排序上实现。 "sort -V" 对我来说效果很好。 "sort -V" 也适用于我,您使用的是哪个版本的 RHEL? 这正是我一直在寻找的。span> 【参考方案3】:试试这个
$ cat a.txt
abc_1
abc_4
abc_2
abc_10
abc_5
$ sort -V a.txt
abc_1
abc_2
abc_4
abc_5
abc_10
【讨论】:
以上是关于在Bash中用数字对字符串进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章