Ik heb een bestand (user.csv) zoals dit
ip,hostname,user,group,encryption,aduser,adattr
wil alle kolommen sorteren op gebruiker,
Ik heb awk -F ":" '{print|"$3 sort -n"}' user.csv
geprobeerd, het werkt niet.
Antwoord 1, autoriteit 100%
Wat dacht je van gewoon sort
.
sort -t, -nk3 user.csv
waar
-
-t,
– definieert uw scheidingsteken als,
. -
-n
– geeft u numerieke sortering. Toegevoegd sinds je het hebt toegevoegd aan je
poging. Als uw gebruikersveld alleen tekst is, heeft u het niet nodig. -
-k3
– definieert het veld (sleutel). gebruiker is het derde veld.
Antwoord 2, autoriteit 12%
- Gebruik awk om de gebruikers-ID vooraan te plaatsen.
- Sorteren
-
Gebruik sed om de dubbele gebruikers-ID te verwijderen, ervan uitgaande dat gebruikers-ID’s geen spaties bevatten.
awk -F, '{ print $3, $0 }' user.csv | sort | sed 's/^.* //'
Antwoord 3, autoriteit 6%
Je kunt een scheidingsteken kiezen, in dit geval heb ik een dubbele punt gekozen en kolom nummer één afgedrukt, gesorteerd op alfabetische volgorde:
awk -F\: '{print $1|"sort -u"}' /etc/passwd
Antwoord 4, autoriteit 5%
awk -F, '{ print $3, $0 }' user.csv | sort -nk2
en voor omgekeerde volgorde
awk -F, '{ print $3, $0 }' user.csv | sort -nrk2
Antwoord 5, autoriteit 3%
probeer dit –
awk '{print $0|"sort -t',' -nk3 "}' user.csv
OF
sort -t',' -nk3 user.csv
Antwoord 6, autoriteit 3%
Aangezien de oorspronkelijke vraag ging over het gebruik van awk
en elk van de eerste 7 antwoorden in plaats daarvan sort
gebruikt, en dat dit de tophit is op Google, hier leest u hoe u awk
gebruikt.
Voorbeeld net.csv-bestand met headers:
ip,hostname,user,group,encryption,aduser,adattr
192.168.0.1,gw,router,router,-,-,-
192.168.0.2,server,admin,admin,-,-,-
192.168.0.3,ws-03,user,user,-,-,-
192.168.0.4,ws-04,user,user,-,-,-
En sort.awk:
#!/usr/bin/awk -f
# usage: ./sort.awk -v f=FIELD FILE
BEGIN {
FS=","
}
# each line
{
a[NR]=$0 ""
s[NR]=$f ""
}
END {
isort(s,a,NR);
for(i=1; i<=NR; i++) print a[i]
}
#insertion sort of A[1..n]
function isort(S, A, n, i, j) {
for( i=2; i<=n; i++) {
hs = S[j=i]
ha = A[j=i]
while (S[j-1] > hs) {
j--;
S[j+1] = S[j]
A[j+1] = A[j]
}
S[j] = hs
A[j] = ha
}
}
Om het te gebruiken:
awk sort.awk f=3 < net.csv # OR
chmod +x sort.awk
./sort.awk f=3 net.csv
Antwoord 7, autoriteit 2%
awk -F "," '{print $0}' user.csv | sort -nk3 -t ','
Dit zou moeten werken
Antwoord 8
Om de eerste regel (header) uit te sluiten van sorteren, heb ik deze opgesplitst in twee buffers.
df | awk 'BEGIN{header=""; $body=""} { if(NR==1){header=$0}else{body=body"\n"$0}} END{print header; print body|"sort -nk3"}'
Antwoord 9
Met GNUawk
:
awk -F ',' '{ a[$3]=$0 } END{ PROCINFO["sorted_in"]="@ind_str_asc"; for(i in a) print a[i] }' file
Zie 8.1.6 Vooraf gedefinieerde array-scanopdrachten gebruiken met gawk voor meer sorteeralgoritmen.