Sortieren von Dateien

Der Filter sort, sortiert die Eingabedateien zeilenweise und gibt die sortíerten Daten auf Standardoutput aus. Wenn die sortierten Daten in einer Datei abgelegt werden sollen, so kann mit Pipe oder Umleitung gearbeitet werden.

Syntax :

  sort [-cmu] [-ooutput] [-ykmem] -zrecsz] [-dfiMnr]
       [-btx] [+pos1[-pos2]]... [inpfile]...

Regeln:
 o Default Sort-key ist die gesamte Zeile

 o Default Sort-Order ist aufsteigend nach der Collating-Sequence.

Die nachfolgenden Optionen beeinflußen  den Sort:
     -c  	Check only, es soll nur die Sortierfolge 
            geprüft werden.
            Eine Ausgabe erfolgt nur, wenn die Folge fehlerhaft ist.

     -m     Merge, die Eingabedateien liegen in  sortierter 
     		Folge vor und sollen zusammengemischt werden.

     -u	    unterdrücke doppelte Entries (unique)
              sort -um +1 -2 datum 
                        |_____ Sortierbegriff beginnt mit Feld 1
                           |___ Sortierbegriff endet vor  Feld 1
                                - es wird nur nach dem ersten Entry 
                                  sortiert.
                                - Trennzeichen ist Blank

     -ooutput 	Name der Outputdatei
              sort -fm -omfile file1 file2 b>

      -ykmem	Angabe der Memorygrösse in KB  die der Sort 
                als Anfangsvorgabe verwendet  (Default max-Memory)
            	-y0   	beginnt mit einer minimalen Memorygrösse. 
            	        Bei Bedarf wird mehr Memory zugeordnet 
            	        bis das Maximum erreicht ist.

     -zrecsz	Die Länge des längsten Satzes wird beim Einlesen 
                für die Sortphase gespeichert,  damit für die 
                Merge-Phase die Buffer entsprechend allokiert 
                werden können. Wird die Sortphase nicht verwendet
                 (-c oder -m) so wird mit Systemdefaults gearbeitet.
                 Ist der Default zu klein, wird der Sort abnormal 
                 beendet.

     Die nachfolgenden Optionen überschreiben die 
     Defaultsortierfolge:
       -d      	Dictionary Order    (Buchstaben, Ziffern, Blanks)

       -f       Groß- und Kleinschreibung wird gleich behandelt 
       			(fold)

       -i        Ignoriere Character außerhalb des  ASCII-Bereichs
                      O40  	bis  O176    	(oktal)
                       x20  	bis     x7E     	(hex)
                        32  	bis     126    	(dezimal)
                 bei nichtnumerischen Vergleichen.

       -n       Numerischer Sort (enthält implizit -b)
                 Zugelassene Zeichen:
                      - führende Blanks
                      - evlt Minus-Zeichen
                      - Null bis n Ziffern
                        evtl. mit Dezimalpunkt

        -r       absteigende Sortierfolgr (reverse order)

       -tx 	Benutze Zeichen x als Trennzeichen zwischen den 
       		Feldern
            z.B. -t: bei der Sortierung der Datei  /etc/passwd.
			Jedes Trennzeichen ist signifikant. 
			::  definiert ein leeres Feld
            Wenn -tx nicht angegeben ist, dann werden Strings durch 
            Blanks getrennt. 
            Das erste Blank oder TAB  gilt als Feldbegrenzer.
            Nachfolgende weitere Blanks sind Teil des 
            nachfolgenden Feldes.
           (Alle Blanks am Satzanfang sind Teil des ersten Feldes).

       -b   führende Blanks und Tabs bei Feldvergleichen ignorieren.

      Optionen können global für für alle Sortierschlüssel angegeben werden (vorne)
      oder gezielt für einzelne Sortierschlüssel (direkt davor).

Die Angabe von pos1  und pos2  betrifft den Sortierschlüssel
Zählbeginn ist 1
        +pos1    in der Form :
                   m[.n] gefolgt von einer Option bdfinr
                   |
                   |__	Anzahl der zu überspringenden Felder 
                        +2 -> Sortierung 3. Feld
                     |
                     |_  Anzahl der zu überspringenden Bytes 
                          innerhalb des Feldes
                         (Default .0). Wenn gleichzeitig mit 
                         -b gearbeitet wird, dann wird erst 
                         ab dem ersten nicht Blank gezählt
                            sort -t: -bn  +2   /etc/passwd   
                                           |____ numeric

        -pos2       in der Form m[.n]  Die letzte Stelle des 
                    Sortierbegriffs ist unmittelbar vor   pos2
                    sort -t: +2 -3 sortdat
        Option:                    
             -b, --ignore-leading-blanks 
             -d, --dictionary-order
             -f, --ignore-case
             -n, --numeric-sort
             -r, --reverse
             
 Wenn kein Sortierschlüssel angebeben wird, wird die gesamte Zeile als Schlüssel verwendet.            
 -u trifft dann nur zu, wenn die komplette Zeile gleich ist.                           

 Beispiele :

   sort -t: +2 -3 +3r -4 sortdat
             \__/_____ aufsteigend nach 3. Feld (Hauptschlüssel)
                  |    |
                   \__/__________ absteigen nach 4. Feld
                                    (2. Schlüssel)

   ls -las | sort -f


Sortierung einer Datei mit mit einem Trennzeichen |
(Option -t'|' )
Sortierschlüssel ist das komplette Feld 1
Doppelte Einträge sollen entfernt werden
bookworm:/#  cd datadir
bookworm:/datadir# cat unsorted
/segeln/navigation/index.php|Übersicht
/segeln/tplan/index.php|Törnplanung
/segeln/navigation/seezeichen/laterale.php|Laterale
/segeln/astro/zeitgleichung.php|Zeitgleichung
/segeln/funkschein/src.php|Prüfungsfragen, 
/segeln/navigation/seezeichen/laterale.php|Laterale
/segeln/funkschein/dsc_menustruktur.php|DS-100 Menüstruktur
 
 
bookworm:/datadir# sort  -t'|' --key=1   -u   unsorted  >  sorted
 
 
bookworm:/datadir# cat sorted
/segeln/astro/zeitgleichung.php|Zeitgleichung
/segeln/funkschein/dsc_menustruktur.php|DS-100 Menüstruktur
/segeln/funkschein/src.php|Prüfungsfragen, 
/segeln/navigation/index.php|Übersicht
/segeln/navigation/seezeichen/laterale.php|Laterale
/segeln/tplan/index.php|Törnplanung


 // ===================================================================

# hier ist Feld 2 der Sortschlüssel 
# auch hier wird der doppelte Eintrag  *laterale*  entfernt 

bookworm:/datadir# sort  -t'|' --key=2   -u  unsorted  > sorted_2

bookworm:/datadir# less sorted_2 
/segeln/funkschein/dsc_menustruktur.php|DS-100 Menüstruktur
/segeln/navigation/seezeichen/laterale.php|Laterale
/segeln/funkschein/src.php|Prüfungsfragen, 
/segeln/tplan/index.php|Törnplanung
/segeln/navigation/index.php|Übersicht
/segeln/astro/zeitgleichung.php|Zeitgleichung
bookworm:/datadir#