Wenn ich diese Dateien in einem Verzeichnis habe
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
Wie kann ich sie in Bash auflisten, damit sie in aufsteigender numerischer Reihenfolge basierend auf dem Zahlenteil der Zeichenfolge sind? So ist die resultierende Reihenfolge cwcch1.pdf, cwcch2.pdf, ..., cwcch9.pdf, cwcch10.pdf
usw.
Letztendlich versuche ich, die PDFs pdftk
mit so etwas wie dem Folgenden zu verknüpfen
pdftk `ls *.pdf | sort -n` cat output output.pdf
Das funktioniert aber nicht, da meine Sortierung falsch ist.
Antworten:
So etwas könnte tun, was Sie wollen, obwohl es einen etwas anderen Ansatz hat:
quelle
Sie
sort
kann die Fähigkeit hat , dies zu tun für Sie:quelle
-V, --version-sort natural sort of (version) numbers within text
Für dieses Beispiel können Sie auch Folgendes tun:
Das heißt, Sie sortieren numerisch (-n) nach dem zweiten Feld (-k2), wobei Sie 'h' als Feldtrennzeichen (-th) verwenden.
quelle
Sie können die
-v
Option in GNU verwendenls
: natürliche Art von (Versions-) Zahlen innerhalb von Text.Dies funktioniert nicht mit BSD
ls
(zB unter OS X), wo die-v
Option eine andere Bedeutung hat.quelle
Verwenden Sie die Shell-Erweiterung direkt in einer Befehlszeile. Die Erweiterung sollte sie richtig bestellen. Wenn ich die
pdftk
Befehlszeilensyntax richtig verstehe , wird dies tun, was Sie wollen:Oder Sie können einen anderen Ansatz versuchen. Wenn ich so etwas tun muss, versuche ich normalerweise, meine Zahlen im Voraus richtig zu formatieren. Wenn ich zu spät dran bin und die PDFs bereits wie in Ihrem Beispiel nummeriert sind, benutze ich Folgendes, um sie neu zu nummerieren:
Jetzt
ls
funktioniert die Standardsortierung ordnungsgemäß.quelle
pdftk cwcch{{1..9},{10..18}}.pdf ...
bash
Erweiterung?Hier ist eine Methode, die nur sort verwendet:
quelle
Sortieren -g wird verwendet, um die Nummern in aufsteigender Reihenfolge zu sortieren.
Die folgende Zeile durchläuft eine Datei mit den Namen der PDF-Dateien und fasst die Zahlen nur mit egrep -o zusammen und sortiert die Zahlen mit sort -g in aufsteigender Reihenfolge . Dann füttert es sed mit diesen Zahlen und steckt sie ein. Dann löscht es die Ausgabe von Duplikaten mit uniq.
Anstelle von uniq können Sie auch awk verwenden:
Das obige ist äquivalent zu uniq.
Was Sie suchen, ist dieser eine Liner:
Inhalt von tmp:
BEARBEITEN:
Ausgabe des Befehls:
quelle
tmp
Datei? Irgendeine Ausgabe zum Einfügen in die Antwort?