これらのファイルをディレクトリに入れておけば
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
文字列の数字部分に基づいて昇順に並べるにはどうすればいいのでしょうか?その結果、cwcch1.pdf, cwcch2.pdf, ..., cwcch9.pdf, cwcch10.pdf
などのようになります
私が最終的にやろうとしていることは、pdfをpdftk
で連結して以下のようなものにすることです
pdftk `ls *.pdf | sort -n` cat output output.pdf
が、私のソートが間違っているのでうまくいきません
38 None 2009-12-06
このような何かがあなたの望むことをするかもしれませんが、それは少し異なるアプローチを取ります
pdftk $(for n in {1..18}; do echo cwcch$n.pdf; done) cat output output.pdf
8 retracile 2009-12-06
あなたのsort
にはその能力があるかもしれません
sort --version-sort
65 Paused until further notice. 2009-12-06
この特定の例では、このようにすることもできます
ls *.pdf | sort -k2 -th -n
つまり、’h’をフィールドの区切り文字(-th)として、第2フィールド(-k2)上で数値的に(-n)ソートします
32 larsks 2009-12-06
GNU ls
: テキスト内の(バージョンの)数値の自然なソート
ls -1v cwcch*
これは BSD ls
(例: OS X) では動作しません
7 Ashutosh Vishwa Bandhu 2013-08-20
コマンドラインで直接シェルの拡張を使用します。拡張はそれらを適切に順序付けする必要があります。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
ソートが正しく動作するようになりました
2 quack quixote 2009-12-06
ソートを使っただけの方法をご紹介します
ls | sort -k1.6n
2 Scot 2014-10-15
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
EDIT:
コマンドの出力:
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
0 Aguevara 2015-11-30