Ich habe eine Datei (user.csv) wie diese
ip,hostname,user,group,encryption,aduser,adattr
möchten alle Spalten nach Benutzer sortieren,
Ich habe es versucht awk -F ":" '{print|"$3 sort -n"}' user.csv
, es funktioniert nicht.
Ich habe eine Datei (user.csv) wie diese
ip,hostname,user,group,encryption,aduser,adattr
möchten alle Spalten nach Benutzer sortieren,
Ich habe es versucht awk -F ":" '{print|"$3 sort -n"}' user.csv
, es funktioniert nicht.
Antworten:
Wie wäre es einfach sort
.
sort -t, -nk3 user.csv
wo
-t,
- definiert Ihr Trennzeichen als ,
.
-n
- gibt Ihnen numerische Sortierung. Hinzugefügt, seit Sie es in Ihrem Versuch hinzugefügt haben. Wenn Ihr Benutzerfeld nur aus Text besteht, benötigen Sie ihn nicht.
-k3
- definiert das Feld (Schlüssel). Benutzer ist das dritte Feld.
sort -t, -nk3 filename.csv | sort -t, -nk6
- Zuerst wird nach Spalte 3 sortiert, dann nach Spalte 6, damit Spalte 6 vollständig sortiert wird, und für alle Zeilen, in denen Spalte 6 identisch ist, werden diese nach Spalte 3 sortiert .
sort -t ',' -k3,3n -k6,6n
wird besser sein. -k3
verwendet Spalte 3 und den Rest der Zeile.
Verwenden Sie sed, um die doppelte Benutzer-ID zu entfernen, vorausgesetzt, die Benutzer-IDs enthalten keine Leerzeichen.
awk -F, '{ print $3, $0 }' user.csv | sort | sed 's/^.* //'
sort
weiß bereits, wie man nach einer bestimmten Spalte sortiert, aber diese Technik - bekannt als Schwartzsche Transformation - ist nützlich, wenn das Feld, nach dem Sie sortieren möchten, nicht trivial eine genau definierte Spalte ist.
Sie können ein Trennzeichen auswählen. In diesem Fall habe ich einen Doppelpunkt ausgewählt und die Spalte Nummer eins gedruckt, sortiert nach alphabetischer Reihenfolge:
awk -F\: '{print $1|"sort -u"}' /etc/passwd
Versuche dies -
awk '{print $0|"sort -t',' -nk3 "}' user.csv
ODER
sort -t',' -nk3 user.csv
awk -F "," '{print $0}' user.csv | sort -nk3 -t ','
Das sollte funktionieren
sort -t, -k3 file