bash:用数字sortingstring
我经常想要对string进行sorting,以便在sorting例如abc_2, abc_1, abc_10
,结果是abc_1, abc_2, abc_10
。 我所看到的每一种sorting机制都被sorting为abc_1, abc_10, abc_2
,它们是从左边开始逐个字符的。
有没有任何有效的方法来获得我想要的结果? 看每一个angular色,确定它是否是一个数字,从随后的数字中构build一个子串,并将其作为一个数字进行sorting的想法,太惊人了。
没有大胡子* nix大师实现了一个替代版本的sort
--sensible_numerical
选项?
执行此操作
sort -t _ -k 2 -g data.file
- -t分离器
- -k键/列
- -g一般数字sorting
我认为这是一个GNU扩展sort
,但你正在寻找--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
尝试这个
$ 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