Regler og eksempler på Linux Sort Command

Data i en Linux tekstfil kan sorteres med sorteringskommandoen så lenge hvert element er avgrenset på en eller annen måte. Ofte brukes kommaet som skilletegn for avgrenset informasjon.

Forretningsanalytiker jobber ved en bærbar datamaskin
David Lees / Iconica / Getty Images

Grunnleggende regler for sortering

Sorteringskommandoen omorganiserer linjene i en tekstfil for å sortere linjene numerisk og alfabetisk. Standardreglene for sorteringskommandoen er:

  • Tekst som starter med et tall vises før tekst som begynner med en bokstav; lavere tall sorteres først.
  • Tekst som starter med en bokstav som vises i alfabetet tidligere enn den første bokstaven i andre tekstoppføringer, sorteres før teksten som starter med en bokstav som vises senere i alfabetet.
  • Når tekst begynner med store og små forekomster av samme bokstav, blir forekomsten med små bokstaver sortert først.

Sorter en tekstfil

For å sortere linjene i en avgrenset Linux-fil, bruk sorteringen kommando som dette:

sorter -k2 tabell1.txt

Denne kommandoen sorterer filen tabell1.txt i henhold til tegnene som starter i den andre kolonnen (

k2 refererer til den andre kolonnen). Forutsatt at inndatafilens innhold er:

1, Justin, Timberlake, tittel 545, pris $7,30
2, Taylor, Swift, Tittel 723, Pris $7,90
3, Mick, Jagger, Tittel 610, Pris $7,90
4, Lady, Gaga, Tittel 118, Pris $7,30
5, Johnny, Cash, Tittel 482, Pris $6,50
6, Elvis, Presley, Tittel 335, Pris $7,30
7, John, Lennon, tittel 271, pris $7,90
8, Michael, Jackson, Tittel 373, Pris $5,50

Fordi den andre kolonnen i dette eksemplet inneholder fornavn, er den sorterte utgangen ordnet etter den første bokstaven i fornavnet til hver enkelt person i den andre kolonnen, som vist nedenfor:

6, Elvis, Presley, Tittel 335, Pris $7,30
7, John, Lennon, tittel 271, pris $7,90
5, Johnny, Cash, Tittel 482, Pris $6,50
1, Justin, Timberlake, tittel 545, pris $7,30
4, Lady, Gaga, Tittel 118, Pris $7,30
8, Michael, Jackson, Tittel 373, Pris $5,50
3, Mick, Jagger, Tittel 610, Pris $7,90
2, Taylor, Swift, Tittel 723, Pris $7,90

Hvis du sorterer filen med -k3 (ved å bruke linjeinnholdet som starter ved kolonnen 3, kolonnen Etternavn), utdataene er:

5, Johnny, Cash, Tittel 482, Pris $6,50
4, Lady, Gaga, Tittel 118, Pris $7,30
8, Michael, Jackson, Tittel 373, Pris $5,50
3, Mick, Jagger, Tittel 610, Pris $7,90
7, John, Lennon, tittel 271, pris $7,90
6, Elvis, Presley, Tittel 335, Pris $7,30
2, Taylor, Swift, Tittel 723, Pris $7,90
1, Justin, Timberlake, tittel 545, pris $7,30

og -k5 lager en liste sortert etter pris:

4, Lady, Gaga, Tittel 118, Pris $7,30
7, John, Lennon, tittel 271, pris $7,90
6, Elvis, Presley, Tittel 335, Pris $7,30
8, Michael, Jackson, Tittel 373, Pris $5,50
5, Johnny, Cash, Tittel 482, Pris $6,50
1, Justin, Timberlake, tittel 545, pris $7,30
3, Mick, Jagger, Tittel 610, Pris $7,90
2, Taylor, Swift, Tittel 723, Pris $7,90

Vent, det fungerte ikke, gjorde det? I stedet for å sortere etter pris, sorterte kommandoen listen etter tittelnummeret. Hvorfor? Vel, med mindre den har gitt skilletegnet som den skal dele hver linje i kolonner med, bruker den mellomrom. Siden det er et mellomrom i midten av hver titteloppføring, blir kolonne fire i hver oppføring ordet "Tittel", og kolonne fem blir tittelnummeret.

Bruk -t-flagget for å spesifisere skilletegnet for sortering. Dette kontrollerer nøyaktig hvor kommandoen skiller ut kolonner.

sorter -t, -k5 tabell1.txt

Dette gir ønsket resultat:

8, Michael, Jackson, Tittel 373, Pris $5,50
5, Johnny, Cash, Tittel 482, Pris $6,50
1, Justin, Timberlake, tittel 545, pris $7,30
4, Lady, Gaga, Tittel 118, Pris $7,30
6, Elvis, Presley, Tittel 335, Pris $7,30
2, Taylor, Swift, Tittel 723, Pris $7,90
3, Mick, Jagger, Tittel 610, Pris $7,90
7, John, Lennon, tittel 271, pris $7,90

Vanligvis vil du spesifisere skilletegnet. Det forhindrer uønsket forvirring og unøyaktige resultater. Dette gjelder spesielt med større filer som kanskje ikke alltid er åpenbart feil.

Omvendt sortering

De -r alternativet reverserer sorteringen. Bruk for eksempel resultatene ovenfor:

sorter -r -t, -k5 tabell1.txt

gir:

7, John, Lennon, tittel 271, pris $7,90
3, Mick, Jagger, Tittel 610, Pris $7,90
2, Taylor, Swift, Tittel 723, Pris $7,90
6, Elvis, Presley, Tittel 335, Pris $7,30
4, Lady, Gaga, Tittel 118, Pris $7,30
1, Justin, Timberlake, tittel 545, pris $7,30
5, Johnny, Cash, Tittel 482, Pris $6,50
8, Michael, Jackson, Tittel 373, Pris $5,50

Lagre en sortert fil

Sortering av en fil lagrer den ikke. For å lagre den sorterte listen i en fil, bruk omdirigeringsoperatøren:

sort -k6 table1.txt > test_new.txt

hvor test_new.txt er den nye filen.

Sorter en strømutgang

Du kan også bruke sorteringskommandoen på utdata fra en strøm, for eksempel røroperatøren:

ls -n | sortere -t, -k5

Dette sorterer utdataene fra filoppføringen generert av ls kommando etter filstørrelse, og starter med de største filene. De -n operatoren spesifiserer numerisk sortering i stedet for alfabetisk.