Forum: PC-Programmierung numeric sort recursive filelist


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Mister A. (mratix)


Bewertung
0 lesenswert
nicht lesenswert
Bin gerade am gröbeln mit einem input | sort > output im bash-script.

Als input fließen über den stdin von
find . -iname '*.txt' | xargs -L 1 echo | awk '{print $0}' >> files.txt
 einige Dateinamen ein.

Relevant ist nur das letzte Zeichen des Dateinamens. Das ist numerisch 
und danach soll sortiert werden z.B.
| sort -dn -o files.txt

Ein möglicher input mit gewünschter Sortierung wäre z.B.
./1.txt
./nachrichten2.txt
week/gestern/frisch_gezüchtet3.txt
old/eskimo99_witze_4.txt
./nix_neues_6.txt
tief/vergraben/22/eiersuche_7.txt
archive/4cm_schnee_im_januar9.txt

Weder `sort` noch `cut` haben einen Parameter, um das letzte Zeichen 
(reverse) oder meinetwegen die letzten 5 Zeichen 
(lastchar+dot+extension) abzufangen.

Hat jemand eine Idee wie ich ansetzen könnte?

: Bearbeitet durch User
von Yalu X. (yalu) (Moderator)


Bewertung
1 lesenswert
nicht lesenswert
Wenn alle Dateinamen die gleiche Extension haben:

rev files.txt | sort | rev

Wenn die Extensions verschieden sein können, aber jeder Dateiname
irgendeine Extension hat:

rev files.txt | sort -t. -k2 | rev

: Bearbeitet durch Moderator
von Mister A. (mratix)


Bewertung
0 lesenswert
nicht lesenswert
$ find . -iname '*.txt' | xargs -L 1 echo | awk '{print $0}' >> files_unsorted
$ cat files_unsorted 
./8.txt
./dir1/2.txt
./dir1/5.txt
./dir1/9.txt
./dir2/4.txt
./dir2/dir2a/3.txt
./1.txt
$ rev files_unsorted | sort | rev
./1.txt
./dir1/2.txt
./dir2/dir2a/3.txt
./dir2/4.txt
./dir1/5.txt
./8.txt
./dir1/9.txt

Bravo! Alles schön nach numeric sortiert, Pfade beibehalten ohne 
aufwendig zu vergewaltigen :)

Ich Danke dir Yalu.

von Mister A. (mratix)


Bewertung
0 lesenswert
nicht lesenswert
Yalu X. schrieb:
> sort -t. -k2
Das ist genial, muss ich mir merken. In Kombination mit `rev` kann man 
dann schön reverse ansetzen.

-t, --field-separator=SEP  SEP benutzen statt Übergang von Nichtleerraum 
zu Leerraum
Klingt stark na Delimiter, in diesem Fall ist es der Punkt vor der 
extension.

Super!

: Bearbeitet durch User
von 🐧 DPA 🐧 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Bzg. `rev`: test10 > test01, 01tset < 10tset ...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.