ABSTRACT: der sort und der uniq befehl werde erklaert AUDIENCE: users SYSTEM: any unix SECTION: basic unix commands AUTHOR: mond COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt heute wieder einmal ein einfacher befehl. den sort befehl haben wir ja schon einige male verwendet. heute einwenig details dazu. sort blabla.txt gibt die zeilen des blabla.txt files in sortierter reihenfolge aus. sortiert wird dabei alphabetisch von zeilenanfang aus. man kann das feld nach dem sortiert werden soll auch angeben: sort +2 blabla.txt wuerde erst nach dem zeiten feld aus suchen. felder sind dabei normalerweise durch leerzeichen oder tabs (white space) getrennt. will man ein anderes trennzeichen so kann man das mit -t angeben: cat /etc/passwd | sort -n -t ":" +2 wuerde nach der userid sortieren. interessant hier ist auch der switch -n der besagt dass nach dem numerischen wert eines feldes sortiert wird und nicht nach dem alphabetischen. (d.h. 9 ist nicht groesser als 87) du -s /home/* |sort -n wuerde z.b. die homeverzeichnisse sortiert nach belegtem plattenplatz ausgeben. (du steht fuer "disk usage" und gibt den speicherplatz einer datei oder eines verzeichnisses an. -s gibt nur die summer fuer jedes argument an) die option "-u" (fuer unique "einzigartig") laest gleiche zeilen bei der ausgabe weg. z.b.: sort -u blabla.txt das haette man auch durch: sort blabla.txt | uniq erreichen koennen. der befehl "uniq" filtert gleiche zeilen die hintereinander kommen. (was ja nach einem sort der fall ist). umgekehrt kann uniq aber auch alle zeilen herausfinden die doppelt sind: uniq -d blabla.txt wuerde von allen zeilen die duchr wiederhohlung geloescht wurden ein exemplar ausgeben. die option -c wuerde dazu noch die zahl der vorkommnisse angeben. mit optionen laesst sich dabei wieder einschraenken ab welchen feldern oder wieviele zeichen verglichen werden sollen... z.B.: ls -i /usr/bin/ | sort -n | uniq -w 7 -d gibt alle files aus /usr/bin aus die in diesem verzeichniss ein file mit der selben inode nummer haben. oder: find . -printf "%8s %p\n" |sort -n |uniq -w 8 -D wuerde alle files unterhalb vom aktuellen verzeichnis ausgeben fuer die es ein anderes file gibt das genau die selbe laenge hat.. (moeglicherweise ein dublikat...) ( %s im printf vom find gibt die filelaenge an. %8s auf 8 stellen formatiert) (gross -D anstatt klein -d gibt bei uniq alle doppelten zeilen aus und nicht nur jeweils eines davon) fuer manche aufgaben ist auch die option -u in uniq nuetzlich damit werden nur zeilen ausgegeben die keine doppelgaenger haben. EXERCISES: * benutze sort und find um die groessten 20 files unterhalb deines homeverzeichnisses zu finden. * verwende die befehle cat, sort und uniq um alle zeilen zu finden die in 2 files identisch sind. (d.h. in jedem der beiden files mindestens je einmal vorkommen) (muss nicht in einer zeile geloest werden. es gibt uebrigens in GNU systemen den befehl "comm" der das loesen koennte aber man kommt auch mit sort und uniq alleine aus.) * verwende die befehle cat, sort und uniq um alle zeilen zu finden die nur in einem der beiden files vorkommen. (muss nicht in einer zeile geloest werden.) * noch etwas kniffliger: verwende cat, sort und uniq um zeilen zu finden die mindestens einmal im ersten nicht jedoch im zweiten file vorkommen. REFERENCES: info sort man sort man uniq info uniq man du