Linux sort-Befehl (bash)

Hallo ,

mit folgendem Befehl : df -h |grep pool |sort -k 6 schaue ich mir meine gemounteten Festplatten an…

kann ich das irgendwie weiter „pipen“ um eine Sortierung der Pools (letzte Spalte) hinzubekommen ? (also damit nach der Zeile mit dem ersten Pool1 die Zeile mit Pool2, dann Pool3 usw. kommen)

dev/sdc1 7,3T 6,9T 27G 100% /pool1
/dev/sdl1 1,8T 1,7T 17G 100% /pool10
/dev/sdm1 1,8T 1,7T 17G 100% /pool11
/dev/sdi1 15T 13T 1,7T 89% /pool12
/dev/sdj1 15T 14T 78G 100% /pool13
/dev/sdo1 2,7T 2,5T 76G 98% /pool14
/dev/sdp1 2,7T 2,5T 76G 98% /pool15
/dev/sdq1 1,8T 1,7T 17G 100% /pool16
/dev/sdr1 1,8T 1,7T 17G 100% /pool17
/dev/sds1 1,8T 1,7T 17G 100% /pool18
/dev/sdt1 1,8T 1,7T 17G 100% /pool19
/dev/sdh 7,3T 6,8T 59G 100% /pool2
/dev/sdu1 1,8T 1,7T 17G 100% /pool20
/dev/sdv1 1,8T 77M 1,7T 1% /pool21
/dev/sdw1 1,8T 1,7T 17G 100% /pool22
/dev/sdx1 1,8T 1,7T 17G 100% /pool23
/dev/sdy1 1,8T 1,7T 17G 100% /pool24
/dev/sdz1 1,8T 1,7T 17G 100% /pool25
/dev/sdaa1 1,8T 1,7T 17G 100% /pool26
/dev/sdab1 1,8T 1,7T 17G 100% /pool27
/dev/sdac1 1,8T 1,7T 17G 100% /pool28
/dev/sdad1 1,8T 1,7T 17G 100% /pool29
/dev/sdb1 5,5T 5,1T 96G 99% /pool3
/dev/sdg1 7,3T 6,8T 78G 99% /pool4
/dev/sda1 15T 14T 50G 100% /pool5
/dev/sdf1 15T 14T 51G 100% /pool6
/dev/sde1 15T 14T 51G 100% /pool7
/dev/sdd1 5,5T 5,1T 96G 99% /pool8
/dev/sdk1 1,8T 1,7T 17G 100% /pool9

vielen Dank schon mal,falls einer eine Idee hat…

Hallo,
es gibt sort -n (numeric) um numerisch zu sortieren, geht aber nicht, da die Spalte 6 nicht numerisch ist. Man könnte mittels sed einen Separator einfügen, sortieren, den wieder löschen:

$ df -h |grep pool | sed 's/pool/pool@/' | sort -t '@' -k2n | tr -d '@'
4 Like

Knaller läuft… Danke sehr… wenn ich darf , hätte ich 2 Fragen zu deiner Lösung:

Sehe ich das richtig :

erste Frage:
bei dem Teil:
sort -t ‚@‘ -k2n

ich muss " -t ‚@‘ " nehmen , weil „sort“ keine Zeichenfolge kennt, sonst würde ich auch " -t ‚/pool‘ " schreiben können … aber da keine Zeichenfolge machbar -> muss ich mit einem Zeichen auskommen…richtig ?

zweite Frage :
bei -k2n : -k ist klar… aber wofür steht das 2 für die foldenden 2 Stellen nach dem „@“ ? weil der gleiche Befehl mit -k1n sollte von pool1 - pool9 auch alles sortieren dann… das tut er aber nicht… wenn ich die gleich Liste mit -k1n ausführe, kommt folgendes…

/dev/sda1 15T 14T 50G 100% /pool5
/dev/sdaa1 1,8T 1,7T 17G 100% /pool26
/dev/sdab1 1,8T 1,7T 17G 100% /pool27
/dev/sdac1 1,8T 1,7T 17G 100% /pool28
/dev/sdad1 1,8T 1,7T 17G 100% /pool29
/dev/sdb1 5,5T 5,1T 96G 99% /pool3
/dev/sdc1 7,3T 6,9T 27G 100% /pool1
/dev/sdd1 15T 14T 51G 100% /pool7
/dev/sde1 5,5T 5,1T 96G 99% /pool8
/dev/sdf1 15T 14T 51G 100% /pool6
/dev/sdg1 7,3T 6,8T 78G 99% /pool4
/dev/sdh 7,3T 6,8T 59G 100% /pool2
/dev/sdi1 15T 13T 1,7T 89% /pool12
/dev/sdj1 15T 14T 78G 100% /pool13
/dev/sdk1 1,8T 1,7T 17G 100% /pool9
/dev/sdl1 1,8T 1,7T 17G 100% /pool10
/dev/sdm1 1,8T 1,7T 17G 100% /pool11
/dev/sdo1 2,7T 2,5T 76G 98% /pool14
/dev/sdp1 2,7T 2,5T 76G 98% /pool15
/dev/sdq1 1,8T 1,7T 17G 100% /pool16
/dev/sdr1 1,8T 1,7T 17G 100% /pool17
/dev/sds1 1,8T 1,7T 17G 100% /pool18
/dev/sdt1 1,8T 1,7T 17G 100% /pool19
/dev/sdu1 1,8T 1,7T 17G 100% /pool20
/dev/sdv1 1,8T 77M 1,7T 1% /pool21
/dev/sdw1 1,8T 1,7T 17G 100% /pool22
/dev/sdx1 1,8T 1,7T 17G 100% /pool23
/dev/sdy1 1,8T 1,7T 17G 100% /pool24
/dev/sdz1 1,8T 1,7T 17G 100% /pool25

Aber vielen Dank nochmal für deine Lösung… mit sed muss ich mich wohl öfter beschäftigen… :slight_smile:

Erste Frage: richtig. Es muß ein Zeichen mit ASCII < 64 sein. Bei GNU coreutils sort geht @ auch noch, bei einigen Versionen obendrein die ASCII-Großbuchstaben.

Zweite Frage: Verstehe ich nicht, -k 2 sortiert nach der zweiten Spalte (getrennt durch @), das Suffix n steht für numerische Sortierung, also 9 vor 10, im alphanumerischen Fall passiert, was Du siehst, 9 kommt nach 10, nach 100, und auch nach 899.

2 Like

Hmm, auf den ersten Blick funktioniert

df -h |grep pool |sort -n -k 6.7

bei mir wie gewünscht, siehe unten. Das -k 6.7 bewirkt eine Sortierung nach dem, was ab der siebten Stelle der sechsten Spalte in den Zeilen steht, also die Ziffern nach dem /pool. Und das -n bewirkt, dass die Ziffernfolge als Zahl interpretiert wird.

Nachtrag: Mit --debug wird der zum Sortieren genutzte Teil unterstrichen, dann siehst du, dass da offensichtlich das Whitespace beim Zählen der Zeichen mitgezählt wird.

/dev/sdc1 7,3T 6,9T 27G 100% /pool1
/dev/sdh 7,3T 6,8T 59G 100% /pool2
/dev/sdb1 5,5T 5,1T 96G 99% /pool3
/dev/sdg1 7,3T 6,8T 78G 99% /pool4
/dev/sda1 15T 14T 50G 100% /pool5
/dev/sdf1 15T 14T 51G 100% /pool6
/dev/sde1 15T 14T 51G 100% /pool7
/dev/sdd1 5,5T 5,1T 96G 99% /pool8
/dev/sdk1 1,8T 1,7T 17G 100% /pool9
/dev/sdl1 1,8T 1,7T 17G 100% /pool10
/dev/sdm1 1,8T 1,7T 17G 100% /pool11
/dev/sdi1 15T 13T 1,7T 89% /pool12
/dev/sdj1 15T 14T 78G 100% /pool13
/dev/sdo1 2,7T 2,5T 76G 98% /pool14
/dev/sdp1 2,7T 2,5T 76G 98% /pool15
/dev/sdq1 1,8T 1,7T 17G 100% /pool16
/dev/sdr1 1,8T 1,7T 17G 100% /pool17
/dev/sds1 1,8T 1,7T 17G 100% /pool18
/dev/sdt1 1,8T 1,7T 17G 100% /pool19
/dev/sdu1 1,8T 1,7T 17G 100% /pool20
/dev/sdv1 1,8T 77M 1,7T 1% /pool21
/dev/sdw1 1,8T 1,7T 17G 100% /pool22
/dev/sdx1 1,8T 1,7T 17G 100% /pool23
/dev/sdy1 1,8T 1,7T 17G 100% /pool24
/dev/sdz1 1,8T 1,7T 17G 100% /pool25
/dev/sdaa1 1,8T 1,7T 17G 100% /pool26
/dev/sdab1 1,8T 1,7T 17G 100% /pool27
/dev/sdac1 1,8T 1,7T 17G 100% /pool28
/dev/sdad1 1,8T 1,7T 17G 100% /pool29

2 Like

Besten Dank nochmals… :slight_smile: die 2te Frage hat sich auch erledigt durch deine ausführliche Antwort.

danke sehr - stimmt… klappt auch so - mit dem zusätzlichen -b Parameter konnte ich es besser nachvollziehen. danke dir natürlich auch— wieder was gelernt :slight_smile: