Sorting strings with numbers in Bash [duplicate]

陌路散爱 提交于 2019-11-26 12:57:44

问题


This question already has an answer here:

  • How to sort strings that contain a common prefix and suffix numerically from Bash? 4 answers

I\'ve often wanted to sort strings with numbers in them so that, when sorting e.g. abc_2, abc_1, abc_10 the result is abc_1, abc_2, abc_10. Every sort mechanism I\'ve seen sorts as abc_1, abc_10, abc_2, that is character by character from the left.

Is there any efficient way to sort to get the result I want? The idea of looking at every character, determining if it\'s a numeral, building a substring out of subsequent numerals and sorting on that as a number is too appalling to contemplate in bash.

Has no bearded *nix guru implemented an alternative version of sort with a --sensible_numerical option?


回答1:


Execute this

sort -t _ -k 2 -g data.file
  • -t separator
  • -k key/column
  • -g general numeric sort



回答2:


I think this is a GNU extension to sort, but you're looking for the --version-sort (or -V) option:

$ 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




回答3:


Try this

$ 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


来源:https://stackoverflow.com/questions/17061948/sorting-strings-with-numbers-in-bash

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!