developer tip

Bash에서 숫자로 문자열 정렬

optionbox 2021. 1. 5. 07:57
반응형

Bash에서 숫자로 문자열 정렬


나는 종종 숫자가있는 문자열을 정렬하여 정렬 할 때 abc_2, abc_1, abc_10결과가 abc_1, abc_2, abc_10. 내가 본 모든 정렬 메커니즘 abc_1, abc_10, abc_2은 왼쪽에서 문자별로 정렬됩니다 .

원하는 결과를 얻기 위해 정렬하는 효율적인 방법이 있습니까? 모든 문자를보고, 숫자인지 확인하고, 후속 숫자에서 하위 문자열을 만들고,이를 숫자로 정렬하는 아이디어는에서 생각하기에는 너무 끔찍합니다 bash.

수염 난 * nix 전문가 sort--sensible_numerical옵션이 있는 대체 버전을 구현하지 않았 습니까?


이것을 실행

sort -t _ -k 2 -g data.file
  • -t 구분자
  • -k 키 / 열
  • -g 일반 숫자 정렬

나는 이것이에 대한 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

참조 URL : https://stackoverflow.com/questions/17061948/sorting-strings-with-numbers-in-bash

반응형