Jeśli mam te pliki w katalogu
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
jak mogę wyświetlić je w Bash, aby były w porządku rosnącym numerycznie w oparciu o część liczbową ciągu? Tak więc wynikowa kolejność jest cwcch1.pdf, cwcch2.pdf, ..., cwcch9.pdf, cwcch10.pdf
itd.
To, co ostatecznie próbuję zrobić, to połączyć pliki PDF pdftk
z czymś takim, jak poniżej
pdftk `ls *.pdf | sort -n` cat output output.pdf
ale to nie działa, ponieważ moje sortowanie jest nieprawidłowe.
Odpowiedzi:
Coś takiego może zrobić to, co chcesz, choć ma nieco inne podejście:
źródło
Twoja
sort
może mieć możliwość zrobić to za Ciebie:źródło
-V, --version-sort natural sort of (version) numbers within text
W tym konkretnym przykładzie możesz również to zrobić:
Oznacza to, że sortuj numerycznie (-n) na drugim polu (-k2), używając „h” jako separatora pól (-th).
źródło
Możesz użyć
-v
opcji w GNUls
: naturalny rodzaj (wersji) liczb w tekście.Nie działa to z BSD
ls
(np. W OS X), gdzie-v
opcja ma inne znaczenie.źródło
Użyj rozszerzenia powłoki bezpośrednio w wierszu polecenia. Rozszerzenie powinno porządkować je poprawnie. Jeśli dobrze rozumiem
pdftk
składnię wiersza poleceń, zrobi to, co chcesz:Lub możesz spróbować innego podejścia. Kiedy muszę zrobić coś takiego, zwykle staram się odpowiednio sformatować swoje liczby przed czasem. Jeśli się spóźnię, a pliki PDF są już ponumerowane jak twój przykład, użyję tego do zmiany numeracji:
Teraz standardowe
ls
sortowanie będzie działać poprawnie.źródło
pdftk cwcch{{1..9},{10..18}}.pdf ...
bash
rozszerzenie?Oto metoda wykorzystująca sortowanie:
źródło
Sortuj -g służy do sortowania liczb w porządku rosnącym.
Poniższa linijka iteruje plik z nazwami plików PDF i pobiera liczby tylko za pomocą egrep -o i używa sort -g do sortowania liczb w porządku rosnącym . Następnie podaje te liczby do sed i podłącza je. Następnie usuwa dane wyjściowe duplikatów z uniq.
Zamiast uniq możesz także użyć awk:
Powyższe jest równoważne z uniq.
To, czego szukasz, to jedna wkładka:
Zawartość tmp:
EDYTOWAĆ:
Wyjście polecenia:
źródło
tmp
pliku? Jakieś dane wyjściowe do wklejenia w odpowiedzi?