"_"가 포함된 행을 숫자로 정렬하는 방법은 무엇입니까?

"_"가 포함된 행을 숫자로 정렬하는 방법은 무엇입니까?

이것은 내 파일에 있는 파일 이름의 하위 집합입니다.

profile_10_1_1
profile_10_1_2
profile_1_1_1

1부터 시작해서 오름차순으로 정렬하려고 합니다. 다음 명령을 사용했습니다.

sort -n filename

또한 이것을 시도했습니다:

sort -nk filename

하지만 10을 가진 항목은 항상 목록의 맨 위에 표시됩니다.

원하는 출력을 얻기 위해 명령을 작성하는 방법:

profile_1_1_1
profile_1_1_2
....
profile_9_1_1
....
profile_10_1_1

답변1

FreeBSD와 GNU에는 sort이에 대한 옵션이 있습니다.-V

sort -V < filename

GNU 에는 옵션이 ls있습니다 -v. 따라서 이러한 파일이 존재하는 경우 다음을 수행할 수 있습니다.

xargs -d '\n' < filename ls -dv --

zsh숫자로 배열을 정렬하는 인수 확장 플래그가 있습니다.

printf '%s\n' ${(fno)"$(<filename)"}

그렇지 않으면 이식성을 위해 다음을 수행해야 합니다.

sort -t_ -k1,1 -k2,2n -k3,3n -k4,4n -k5,5n filename

답변2

-V당신이 원하는 것.

-V, --version-sort
              natural sort of (version) numbers within text

적어도 GNU에서는 작동합니다 sort.

관련 정보