문자와 숫자를 사용하여 절대 디렉토리 경로를 정렬하기 위한 솔루션을 온라인에서 찾는 데 어려움을 겪고 있습니다.
예는 다음과 같습니다. 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