절대 디렉토리 경로를 알파벳순과 숫자순으로 정렬

절대 디렉토리 경로를 알파벳순과 숫자순으로 정렬

문자와 숫자를 사용하여 절대 디렉토리 경로를 정렬하기 위한 솔루션을 온라인에서 찾는 데 어려움을 겪고 있습니다.

예는 다음과 같습니다. test.txt라는 파일에 있습니다.

 /opt/informix/data/dcdwhdev/rootdbs.2
 /opt/informix/data/dcdwhdev/db1.1
 /opt/informix/data/dcdwhdev/db1.10
 /opt/informix/data/dcdwhdev/db1.11
 /opt/informix/data/dcdwhdev/rootdbs.1
 /opt/informix/data/dcdwhdev/db1.12
 /opt/informix/data/dcdwhdev/db1.19
 /opt/informix/data/dcdwhdev/db1.2
 /opt/informix/data/dcdwhdev/db1.21
 /opt/informix/data/dcdwhdev/db1.22
 /opt/informix/data/dcdwhdev/db1.23
 /opt/informix/data/dcdwhdev/db1.3
 /opt/informix/data/dcdwhdev/db1.31
 /opt/informix/data/dcdwhdev/db1.32
 /opt/informix/data/dcdwhdev/db1.33

내가 달성하고 싶은 것은 다음과 같습니다.

/opt/informix/data/dcdwhdev/db1.1
/opt/informix/data/dcdwhdev/db1.2
/opt/informix/data/dcdwhdev/db1.3
/opt/informix/data/dcdwhdev/db1.10
/opt/informix/data/dcdwhdev/db1.11
/opt/informix/data/dcdwhdev/db1.12
/opt/informix/data/dcdwhdev/db1.19
/opt/informix/data/dcdwhdev/db1.21
/opt/informix/data/dcdwhdev/db1.22
/opt/informix/data/dcdwhdev/db1.23
/opt/informix/data/dcdwhdev/db1.31
/opt/informix/data/dcdwhdev/db1.32
/opt/informix/data/dcdwhdev/db1.33
/opt/informix/data/dcdwhdev/rootdbs.1
/opt/informix/data/dcdwhdev/rootdbs.2

답변1

GNU가 있는 경우 sort(아마도 gsort시스템에서 호출되었거나 /opt/gnu/bin디렉토리에 위치하거나IBM.com의 coreutils RPM):

sort -V < test.txt

가능한 경우 zsh(IBM.com의 RPM 패키지):

print -rC1 -- /(Nne['reply=(${(f)"$(<test.txt)"})'])

또는 디렉토리의 파일을 직접 나열하십시오.

print -rC1 /opt/informix/data/dcdwhdev/*(Nn)

그렇지 않은 경우 예를 들어 다음을 사용할 수 있습니다 perl.

perl -e '
  print $_->[1] for 
    sort {$a->[0] cmp $b->[0]}
      map {[s/\d+/sprintf "%06d", $&/ger, $_]} <STDIN>' < test.txt

10진수 시퀀스가 ​​6자리로 제로 패딩된 모든 행을 비교하여 목록을 정렬합니다.

파일의 행이 항상 다음과 같은 모양이고 행 앞의 부분만 .어휘적으로만 비교하고 행 뒤의 부분을 수치적으로 비교하면 다음과 같이 할 수 있습니다.

sort -t. -k1,1 -k2,2n < test.txt

답변2

내 프로세스는 이름을 2개로 분할한 다음 정렬하고 다시 합치는 것입니다.

for fp in `cat test.txt | awk -F\. '{print $1}' | sort | uniq`; do grep $fp test.txt | sed 's/\./\ /g' | sort -nk2 | sed 's/\ /\./g' ;done
./opt/informix/data/dcdwhdev/db1.1
./opt/informix/data/dcdwhdev/db1.2
./opt/informix/data/dcdwhdev/db1.3
./opt/informix/data/dcdwhdev/db1.10
./opt/informix/data/dcdwhdev/db1.11
./opt/informix/data/dcdwhdev/db1.12
./opt/informix/data/dcdwhdev/db1.19
./opt/informix/data/dcdwhdev/db1.21
./opt/informix/data/dcdwhdev/db1.22
./opt/informix/data/dcdwhdev/db1.23
./opt/informix/data/dcdwhdev/db1.31
./opt/informix/data/dcdwhdev/db1.32
./opt/informix/data/dcdwhdev/db1.33
./opt/informix/data/dcdwhdev/rootdbs.1
./opt/informix/data/dcdwhdev/rootdbs.2

관련 정보