これらのファイルがディレクトリにある場合
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'を使用して、2番目のフィールド(-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
ソートが正しく機能します。
ソートを使用する方法は次のとおりです。
ls | sort -k1.6n
ソート-g 昇順で番号を並べ替えるために使用されます。
anthony@mtt3:~$ sort --help | egrep "\-g"
-g, --general-numeric-sort compare according to general numerical value
次の1つのライナーは、PDFファイルの名前を持つファイルを反復処理し、 egrep -o そして使用 ソート-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