Gegevens in een Linux-tekstbestand kunnen worden gesorteerd met het sort-commando zolang elk element op de een of andere manier wordt afgebakend. Vaak wordt de komma gebruikt als scheidingsteken voor informatie met scheidingstekens.
Basisregels voor sorteren
De sorteeropdracht herschikt de regels in een tekstbestand om de regels numeriek en alfabetisch te sorteren. De standaardregels voor het sorteercommando zijn:
- Tekst die begint met een cijfer verschijnt vóór tekst die begint met een letter; lagere getallen eerst sorteren.
- Tekst die begint met een letter die eerder in het alfabet voorkomt dan de eerste letter van andere tekstitems, wordt gesorteerd voor de tekst die begint met een letter die later in het alfabet verschijnt.
- Wanneer tekst begint met hoofdletters en kleine letters van dezelfde letter, wordt de kleine letter als eerste gesorteerd.
Een tekstbestand sorteren
Om de regels in een Linux-bestand met scheidingstekens te sorteren, gebruikt u het sort-commando als volgt: sort -k2 table1.txt
Deze opdracht sorteert het bestand tabel1.txt volgens de tekens die beginnen bij de tweede kolom (k2 verwijst naar de tweede kolom). Ervan uitgaande dat de inhoud van het invoerbestand is: 1, Justin, Timberlake, titel 545, prijs $ 7,30
2, Taylor, Swift, Titel 723, Prijs $ 7,90
3, Mick, Jagger, Titel 610, Prijs $ 7,90
4, Lady, Gaga, Titel 118, Prijs $ 7,30
5, Johnny, Cash, Titel 482, Prijs $ 6,50
6, Elvis, Presley, Titel 335, Prijs $ 7,30
7, John, Lennon, Titel 271, Prijs $ 7,90
8, Michael, Jackson, Titel 373, Prijs $ 5,50
Omdat de tweede kolom in dit voorbeeld voornamen bevat, wordt de gesorteerde uitvoer gerangschikt op de eerste letter van de voornaam van elk individu in de tweede kolom, zoals hieronder weergegeven: 6, Elvis, Presley, Title 335, Price $7.30
7, John, Lennon, Titel 271, Prijs $ 7,90
5, Johnny, Cash, Titel 482, Prijs $ 6,50
1, Justin, Timberlake, Titel 545, Prijs $ 7,30
4, Lady, Gaga, Titel 118, Prijs $ 7,30
8, Michael, Jackson, Titel 373, Prijs $ 5,50
3, Mick, Jagger, Titel 610, Prijs $ 7,90
2, Taylor, Swift, Titel 723, Prijs $ 7,90
Als u het bestand sorteert met -k3 (met behulp van de regelinhoud beginnend bij kolom) 3, de kolom Achternaam), is de uitvoer: 5, Johnny, Cash, Titel 482, Prijs $ 6,50
4, Lady, Gaga, Titel 118, Prijs $ 7,30
8, Michael, Jackson, Titel 373, Prijs $ 5,50
3, Mick, Jagger, Titel 610, Prijs $ 7,90
7, John, Lennon, Titel 271, Prijs $ 7,90
6, Elvis, Presley, Titel 335, Prijs $ 7,30
2, Taylor, Swift, Titel 723, Prijs $ 7,90
1, Justin, Timberlake, Titel 545, Prijs $ 7,30
en -k5 produceert een lijst gesorteerd op prijs: 4, Lady, Gaga, Titel 118, Prijs $ 7,30
7, John, Lennon, Titel 271, Prijs $ 7,90
6, Elvis, Presley, Titel 335, Prijs $ 7,30
8, Michael, Jackson, Titel 373, Prijs $ 5,50
5, Johnny, Cash, Titel 482, Prijs $ 6,50
1, Justin, Timberlake, Titel 545, Prijs $ 7,30
3, Mick, Jagger, Titel 610, Prijs $ 7,90
2, Taylor, Swift, Titel 723, Prijs $ 7,90
Wacht, dat werkte niet, toch? In plaats van op prijs te sorteren, sorteerde de opdracht de lijst op titelnummer. Waarom? Tenzij het het scheidingsteken heeft gegeven waarop het elke regel in kolommen moet opsplitsen, gebruikt het spaties. Omdat er een spatie in het midden van elk titelitem staat, wordt kolom vier in elk item het woord ‘Titel’ en kolom vijf het titelnummer. Gebruik de vlag -t om het scheidingsteken voor sorteren op te geven. Dit bepaalt precies waar de opdracht kolommen scheidt. sort -t, -k5 table1.txt
Dit levert het gewenste resultaat op: 8, Michael, Jackson, titel 373, prijs $ 5,50
5, Johnny, Cash, Titel 482, Prijs $ 6,50
1, Justin, Timberlake, Titel 545, Prijs $ 7,30
4, Lady, Gaga, Titel 118, Prijs $ 7,30
6, Elvis, Presley, Titel 335, Prijs $ 7,30
2, Taylor, Swift, Titel 723, Prijs $ 7,90
3, Mick, Jagger, Titel 610, Prijs $ 7,90
7, John, Lennon, Titel 271, Prijs $ 7,90
Meestal wilt u het scheidingsteken opgeven. Het voorkomt ongewenste verwarring en onnauwkeurige resultaten. Dit geldt met name voor grotere bestanden die niet altijd duidelijk onjuist zijn.
Een sortering omkeren
De -R optie keert de sortering om. Gebruik bijvoorbeeld de bovenstaande resultaten: sort -r -t, -k5 table1.txt
opbrengsten: 7, John, Lennon, Titel 271, Prijs $ 7,90
3, Mick, Jagger, Titel 610, Prijs $ 7,90
2, Taylor, Swift, Titel 723, Prijs $ 7,90
6, Elvis, Presley, Titel 335, Prijs $ 7,30
4, Lady, Gaga, Titel 118, Prijs $ 7,30
1, Justin, Timberlake, Titel 545, Prijs $ 7,30
5, Johnny, Cash, Titel 482, Prijs $ 6,50
8, Michael, Jackson, Titel 373, Prijs $ 5,50
Een gesorteerd bestand opslaan
Als u een bestand sorteert, wordt het niet opgeslagen. Gebruik de omleidingsoperator om de gesorteerde lijst in een bestand op te slaan: sort -k6 table1.txt > test_new.txt
waar test_new.txt is het nieuwe bestand.
Een streamuitvoer sorteren
U kunt het sort-commando ook toepassen op de uitvoer van een stream, zoals de pipe-operator: ls -n | sorteer -t, -k5
Dit sorteert de uitvoer van de bestandslijst gegenereerd door de ls commando op bestandsgrootte, te beginnen met de grootste bestanden. De -N operator specificeert numerieke sortering in plaats van alfabetisch.