[OT] ls -l nach Spalte 5 sortieren
Hallo Liste Nur so aus Neugier! Also! Ich habe eine Aufgabe aus meinem Buch gemacht, das ich derzeit lese. man soll die Ausgabe von ls -l mithilfe von sort und der Spalte 5 nummerisch nach dateilange sortieren. Meine selbst erarbeitete Lösung istfolgende (alles afu einer Zeile): ls -l | tr -s ' ' '\t' | while read a ; do echo -ne "`echo ${a} | tr -s ' ' '\t' | cut -f 5`\t" ; echo "${a}" ; done | sort -n | cut -f 2- Die Lösung des Autors ist folgende: ls -l | tr '\t' ' ' | tr -s ' ' ' ' | sort -t ' ' -n -k 5,5 Kann mir jeman nochmal genauer erklären was da abläuft? das -k und diese 5,5 kapiere ich nicht so recht. Und warum nimmt man nicht gleich? ls -l | tr -s ' ' '\t' | sort -t '?' -n -k 5,5 (an Stelle des Fragezeichens natürlich das Tabulatorzeichen, das ich leider auch nicht recht weis.) Kann mir das jemand nochmal erklären? Viele Grüße Peter -- ######################################################################## ######################################################################## ######################################################################## ######################################################################## -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Peter Steffinger schrieb:
Hallo Liste
Nur so aus Neugier!
Also!
Ich habe eine Aufgabe aus meinem Buch gemacht, das ich derzeit lese. man soll die Ausgabe von ls -l mithilfe von sort und der Spalte 5 nummerisch nach dateilange sortieren.
Meine selbst erarbeitete Lösung istfolgende (alles afu einer Zeile): ls -l | tr -s ' ' '\t' | while read a ; do echo -ne "`echo ${a} | tr -s ' ' '\t' | cut -f 5`\t" ; echo "${a}" ; done | sort -n | cut -f 2-
Die Lösung des Autors ist folgende: ls -l | tr '\t' ' ' | tr -s ' ' ' ' | sort -t ' ' -n -k 5,5
Kann mir jeman nochmal genauer erklären was da abläuft? das -k und diese 5,5 kapiere ich nicht so recht.
-k gibt die Spalten (erst,letzte) an die für die Sortierung beachtet werden sollen. Hier: erste=5, letzte=5 also 5,5. Durch tr -s ' ' ' ' werden aufeinander folgenden Leerzeichen zu einem zusammengefasst.
Und warum nimmt man nicht gleich? ls -l | tr -s ' ' '\t' | sort -t '?' -n -k 5,5 (an Stelle des Fragezeichens natürlich das Tabulatorzeichen, das ich leider auch nicht recht weis.)
Damit wird jedes Leerzeichen durch ein Tab ersetzt. Es ist fraglich, ob dann die Dateigrösse immer noch für jede Zeile in der 5-ten Spalte läge. -- Mit freundlichen Grüßen Martin Blank -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo Martin Am Sonntag, 29. August 2010, 18:16:18 schrieb Martin Blank:
Meine selbst erarbeitete Lösung istfolgende (alles afu einer Zeile): ls -l | tr -s ' ' '\t' | while read a ; do echo -ne "`echo ${a} | tr -s ' ' '\t' | cut -f 5`\t" ; echo "${a}" ; done | sort -n | cut -f 2-
Die Lösung des Autors ist folgende: ls -l | tr '\t' ' ' | tr -s ' ' ' ' | sort -t ' ' -n -k 5,5
Kann mir jeman nochmal genauer erklären was da abläuft? das -k und diese 5,5 kapiere ich nicht so recht.
-k gibt die Spalten (erst,letzte) an die für die Sortierung beachtet werden sollen. Hier: erste=5, letzte=5 also 5,5. Durch tr -s ' ' ' ' werden aufeinander folgenden Leerzeichen zu einem zusammengefasst.
Ok, dann verstehe ich diesen Teil nun. Schon mal danke dafür.
Und warum nimmt man nicht gleich? ls -l | tr -s ' ' '\t' | sort -t '?' -n -k 5,5 (an Stelle des Fragezeichens natürlich das Tabulatorzeichen, das ich leider auch nicht recht weis.)
Damit wird jedes Leerzeichen durch ein Tab ersetzt. Es ist fraglich, ob dann die Dateigrösse immer noch für jede Zeile in der 5-ten Spalte läge.
An anderer Stelle im Buch verwendet der Autor in einem anderen Zusammenhang tr -s ' ' '\t' und beschreibt dazu das dabei mehrere Leerzeichen zu einem zusammengezogen werden und somit nur durch ein Tab ersetzt werden. Ich dachte, das das Problem eher darin liegt, das sort kein Tab als Trenner kann. Viele Grüße Peter -- ######################################################################## ######################################################################## ######################################################################## ######################################################################## -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Peter Steffinger schrieb:
Hallo Martin
Am Sonntag, 29. August 2010, 18:16:18 schrieb Martin Blank:
Meine selbst erarbeitete Lösung istfolgende (alles afu einer Zeile): ls -l | tr -s ' ' '\t' | while read a ; do echo -ne "`echo ${a} | tr -s ' ' '\t' | cut -f 5`\t" ; echo "${a}" ; done | sort -n | cut -f 2-
Die Lösung des Autors ist folgende: ls -l | tr '\t' ' ' | tr -s ' ' ' ' | sort -t ' ' -n -k 5,5
Kann mir jeman nochmal genauer erklären was da abläuft? das -k und diese 5,5 kapiere ich nicht so recht.
-k gibt die Spalten (erst,letzte) an die für die Sortierung beachtet werden sollen. Hier: erste=5, letzte=5 also 5,5. Durch tr -s ' ' ' ' werden aufeinander folgenden Leerzeichen zu einem zusammengefasst.
Ok, dann verstehe ich diesen Teil nun. Schon mal danke dafür.
Und warum nimmt man nicht gleich? ls -l | tr -s ' ' '\t' | sort -t '?' -n -k 5,5 (an Stelle des Fragezeichens natürlich das Tabulatorzeichen, das ich leider auch nicht recht weis.)
Damit wird jedes Leerzeichen durch ein Tab ersetzt. Es ist fraglich, ob dann die Dateigrösse immer noch für jede Zeile in der 5-ten Spalte läge.
An anderer Stelle im Buch verwendet der Autor in einem anderen Zusammenhang tr -s ' ' '\t' und beschreibt dazu das dabei mehrere Leerzeichen zu einem zusammengezogen werden und somit nur durch ein Tab ersetzt werden. Ich dachte, das das Problem eher darin liegt, das sort kein Tab als Trenner kann.
In mindestens einer Beschreibung habe ich für die Option -t gelesen, dass Tab der Default-Trenner ist. Die Manpage spricht allerdings nur von "non-blank to blank transition". Weil die Trennung von Spalten aber eine übliche Methode ist, erscheint es als wenig sinnvoll, sollte sort es nicht verwenden können. -- Mit freundlichen Grüßen Martin Blank -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mon, 30 Aug 2010, Martin Blank schrieb:
In mindestens einer Beschreibung habe ich für die Option -t gelesen, dass Tab der Default-Trenner ist. Die Manpage spricht allerdings nur von "non-blank to blank transition". Weil die Trennung von Spalten aber eine übliche Methode ist, erscheint es als wenig sinnvoll, sollte sort es nicht verwenden können.
Eher, das es '\t' nicht interpretiert. Mit nem echten TAB geht's auf jeden Fall: sort -t 'Strg+v TAB' ... Oder man nimmt find und läßt sich ausgeben, was man braucht: find . -maxdepth 1 -printf '%s ' -ls | sort -n | cut -d' ' -f4- Statt dem '-ls' kann man sich auch sonst direkt nur das ausgeben lassen, was man braucht (siehe man find -> Beschreibung von -printf). HTH, -dnh -- Coffee not found: user halted -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo David und Martin Am Montag, 30. August 2010, 15:07:50 schrieb David Haller:
Eher, das es '\t' nicht interpretiert. Mit nem echten TAB geht's auf jeden Fall: sort -t 'Strg+v TAB' ...
Oder man nimmt find und läßt sich ausgeben, was man braucht:
find . -maxdepth 1 -printf '%s ' -ls | sort -n | cut -d' ' -f4-
Statt dem '-ls' kann man sich auch sonst direkt nur das ausgeben lassen, was man braucht (siehe man find -> Beschreibung von -printf).
Ich glaube ich muss die Aufgabe doch mal genauer aufschreiben. Hier die Aufgabe wie ich sie im Buch steht: "Aufgabe Schreiben Sie ein Kommando, das ls -l nach Dateilängenangabe aufsteigend sortiert ausgiebt. Der ls ist nur als ls -l ohne weitere Parameter zu verwenden. Das Kommando zum Sortieren heißt sort. Die fünfte Spalte des ls -l enhält die Dateilänge." @David Wie würdest du diese Aufgabe am elegantesten lösen? Ohne das, wie in meiner Variante 3 Meter Kommandozeile entsteht :-) Viele Grüße Peter -- ######################################################################## ######################################################################## ######################################################################## ######################################################################## -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am 30. August 2010 22:37 schrieb Peter Steffinger
Wie würdest du diese Aufgabe am elegantesten lösen?
ls -l |sort -k 5,5 -n Gruß Martin -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo Martin Am Montag, 30. August 2010, 22:46:49 schrieb Martin Schröder:
ls -l |sort -k 5,5 -n
Funktioniert einwandfrei. Ich muss mich echt wundern, das ein Buchautor dann sowas konstruiert: ls -l | tr '\t' ' ' | tr -s ' ' ' ' | sort -t ' ' -n -k 5,5 Ich kann mir das dann nur so vorstellen, das man die längere Variante benutzt um auf Nummer Sicher zu gehen. Viele Grüße Peter -- ######################################################################## ######################################################################## ######################################################################## ######################################################################## -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am 30. August 2010 23:16 schrieb Peter Steffinger
Ich muss mich echt wundern, das ein Buchautor dann sowas konstruiert: ls -l | tr '\t' ' ' | tr -s ' ' ' ' | sort -t ' ' -n -k 5,5
Ich kann mir das dann nur so vorstellen, das man die längere Variante benutzt um auf Nummer Sicher zu gehen.
Linux != Unix. Möglicherweise braucht man sowas auf älteren Unixen, bspw. SunOS 4 oder AIX 3. Gruß Martin -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (4)
-
David Haller
-
Martin Blank
-
Martin Schröder
-
Peter Steffinger