디렉토리에이 파일들이 있다면
cwcch10.pdf
cwcch11.pdf
cwcch12.pdf
cwcch13.pdf
cwcch14.pdf
cwcch15.pdf
cwcch16.pdf
cwcch17.pdf
cwcch18.pdf
cwcch1.pdf
cwcch2.pdf
cwcch3.pdf
cwcch4.pdf
cwcch5.pdf
cwcch6.pdf
cwcch7.pdf
cwcch8.pdf
cwcch9.pdf
문자열의 숫자 부분을 기준으로 오름차순으로 표시되도록 Bash에 어떻게 나열 할 수 있습니까? 따라서 결과 순서는입니다 cwcch1.pdf, cwcch2.pdf, ..., cwcch9.pdf, cwcch10.pdf
.
내가 궁극적으로하려고하는 것은 PDF와 pdftk
다음을 연결하는 것입니다.
pdftk `ls *.pdf | sort -n` cat output output.pdf
그러나 정렬이 잘못되어 작동하지 않습니다.
답변
약간 다른 접근법이 필요하지만 이와 같은 것이 원하는 것을 할 수 있습니다.
pdftk $(for n in {1..18}; do echo cwcch$n.pdf; done) cat output output.pdf
답변
당신 sort
은 당신 을 위해 이것을 할 수 있습니다 :
sort --version-sort
답변
이 특정 예제의 경우 다음을 수행 할 수도 있습니다.
ls *.pdf | sort -k2 -th -n
즉, 필드 구분 기호 (-th)로 ‘h’를 사용하여 두 번째 필드 (-k2)에서 숫자 (-n)를 정렬합니다.
답변
-v
GNU에서이 옵션을 사용할 수 있습니다 ls
: 텍스트 내 자연 정렬 (버전) 숫자.
ls -1v cwcch*
옵션이 다른 의미를 갖는 BSD ls
(예 : OS X)에서는 작동하지 않습니다 -v
.
답변
명령 행에서 직접 쉘 확장을 사용하십시오. 확장은 제대로 주문해야합니다. pdftk
의 명령 줄 구문을 올바르게 이해 하면 원하는 작업을 수행합니다.
# shell expansion with square brackets
pdftk cwcch[1-9].pdf cwcch1[0-9].pdf cat output output.pdf
# shell expansion with curly braces
pdftk cwcch{{1..9},{10..18}}.pdf cat output output.pdf
또는 다른 접근 방식을 시도 할 수 있습니다. 이런 식으로해야 할 때는 보통 미리 숫자를 올바르게 형식화하려고합니다. 늦게 들어 와서 PDF가 이미 귀하의 예와 같이 번호가 매겨지면이 번호를 사용하여 번호를 다시 매길 것입니다.
# rename is rename.pl aka prename -- perl rename script
# this adds a leading zero to single-digit numbers
rename 's/(\d)/0$1/' cwcch[1-9].pdf
이제 표준 ls
정렬이 제대로 작동합니다.
답변
다음은 sort를 사용하는 방법입니다.
ls | sort -k1.6n
답변
Sort -g 는 숫자를 오름차순으로 정렬하는 데 사용됩니다.
anthony@mtt3:~$ sort --help | egrep "\-g"
-g, --general-numeric-sort compare according to general numerical value
다음 하나의 라이너는 PDF 파일 이름으로 파일을 반복하고 egrep -o 로만 숫자를 가져 오고 sort -g 를 사용 하여 숫자를 오름차순으로 정렬합니다 . 그런 다음이 숫자를 sed에 공급하고 연결합니다. 그런 다음 uniq으로 중복 출력을 제거합니다.
uniq 대신 awk를 사용할 수도 있습니다.
awk '!x[$0]++'
위의 내용은 uniq와 같습니다.
당신이 찾고있는 것은 이 하나의 라이너입니다.
for i in `cat tmp | egrep -o "[0-9]*" | sort -g`; do cat tmp | sed "s/\(^[a-z]*\)\([0-9]*\)\(\.pdf\)/\1$i\3/g" | uniq; done
tmp의 내용 :
anthony@mtt3:~$ cat tmp
cwcch10.pdf
cwcch11.pdf
cwcch12.pdf
cwcch13.pdf
cwcch14.pdf
cwcch15.pdf
cwcch16.pdf
cwcch17.pdf
cwcch18.pdf
cwcch1.pdf
cwcch2.pdf
cwcch3.pdf
cwcch4.pdf
cwcch5.pdf
cwcch6.pdf
cwcch7.pdf
cwcch8.pdf
cwcch9.pdf
편집하다:
명령 출력 :
anthony@mtt3:~$ for i in `cat tmp | egrep -o "[0-9]*" | sort -g`; do cat tmp | sed "s/\(^[a-z]*\)\([0-9]*\)\(\.pdf\)/\1$i\3/g" | uniq; done
cwcch1.pdf
cwcch2.pdf
cwcch3.pdf
cwcch4.pdf
cwcch5.pdf
cwcch6.pdf
cwcch7.pdf
cwcch8.pdf
cwcch9.pdf
cwcch10.pdf
cwcch11.pdf
cwcch12.pdf
cwcch13.pdf
cwcch14.pdf
cwcch15.pdf
cwcch16.pdf
cwcch17.pdf
cwcch18.pdf