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