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)


Lesenswert?

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

Als input fließen über den stdin von
1
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.
1
| sort -dn -o files.txt

Ein möglicher input mit gewünschter Sortierung wäre z.B.
1
./1.txt
2
./nachrichten2.txt
3
week/gestern/frisch_gezüchtet3.txt
4
old/eskimo99_witze_4.txt
5
./nix_neues_6.txt
6
tief/vergraben/22/eiersuche_7.txt
7
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)


Lesenswert?

Wenn alle Dateinamen die gleiche Extension haben:

1
rev files.txt | sort | rev

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

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

: Bearbeitet durch Moderator
von Mister A. (mratix)


Lesenswert?

1
$ find . -iname '*.txt' | xargs -L 1 echo | awk '{print $0}' >> files_unsorted
2
$ cat files_unsorted 
3
./8.txt
4
./dir1/2.txt
5
./dir1/5.txt
6
./dir1/9.txt
7
./dir2/4.txt
8
./dir2/dir2a/3.txt
9
./1.txt
10
$ rev files_unsorted | sort | rev
11
./1.txt
12
./dir1/2.txt
13
./dir2/dir2a/3.txt
14
./dir2/4.txt
15
./dir1/5.txt
16
./8.txt
17
./dir1/9.txt

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

Ich Danke dir Yalu.

von Mister A. (mratix)


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)


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]
  • [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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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