Hoe awk sorteren op kolom 3 te gebruiken

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.csvgeprobeerd, 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%

  1. Gebruik awk om de gebruikers-ID vooraan te plaatsen.
  2. Sorteren
  3. 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 awken elk van de eerste 7 antwoorden in plaats daarvan sortgebruikt, en dat dit de tophit is op Google, hier leest u hoe u awkgebruikt.

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.

Other episodes