Mocht je de eerste vijf lessen van de Shell cursus gemist hebben, kijk dan even voor het overzicht van alle lessen op de pagina Shell Cursus
Werken met teksten in bestanden
Tekst uit een bestand sorteren met sort
Met het sort commando kun je de tekst in een bestand sorteren. In het volgende voorbeeld zie je wat voor invloed dat heeft op het test.html bestand.
sort test.html
Zoals je ziet worden de regels op alfabetische volgorde gesorteerd nu, waarbij de lege regels als eerst worden getoond.
Je kunt de resultaten ook andersom laten zien:
sort -r test.html
Je kunt ook regels numeriek laten sorteren.
sort -n test.html
De normale sorteer regels gelden hierbij ook en als extraatje worden ook de regels die beginnen met een nummer gesorteerd. Dit zelfde kun je ook andersom laten doen:
sort -nr test.html
Gedeeltes van een regel tekst opvragen met awk
Soms willen we slechts een specifiek gedeelte van een regel tekst hebben. Als je bijvoorbeeld op zoek bent naar een specifiek detail binnen een regel aan tekst. Vaak is tekst gescheiden door een spatie en met gebruik van het awk commando kun je specifieke velden uit een regel halen. In het voorbeeld haal ik uit het test.html elk tweede woord van een regel.
cat test.html| awk '{print $2}'
Zoals je kunt zien heb je nu als output elk tweede woord van een regel als output. Welk specifieke veld je wilt hebben kun je aangeven via $ met een nummer. Wil ik het vierde woord uit een regel hebben dan gebruik ik $4. Het awk commando geeft elk specifieke veld automatisch een eigen veldnummer ($) en zodoende kun je heel gedetailleerde informatie uit een regel tekst halen met dit commando.
Gedeeltes van een regel tekst opvragen met cut
Een soortgelijk commando als awk is het cut commando. Met dit commando kun je een bepaald gedeelte van de tekst wegknippen en deze zie je dan niet als output. Als voorbeeld kijken we even naar wat er gebeurt als we dit toepassen op een ls -l commando.
ls -l| cut -c2-10,52-
Zoals je ziet wordt er slechts een bepaalde gedeelte van de eerste ls -l weergave getoond op het moment dat je cut gebruikt. Maar wat betekent -c2-10, 52- precies? Hiermee geef je aan dat je slechts het 2e karakter t/m het 10e karakter wilt zien, en daarna van karakter 52 tot aan het eind.
Unieke regels uit een bestand filteren met uniq
Regelmatig komt het voor dat je regels krijgt waar precies dezelfde informatie staat. Hier zit je niet altijd op te wachten en daar kun je dan ook het uniq commando voor gebruiken. Nadeel echter van dit commando is dat uniq slechts de dubbele regels eruit haalt als ze achter elkaar getoond worden. Je moet dus eerst deze regels sorteren.
cat test.html| sort|uniq
Je hebt nu als eerst de tekst in het test.html bestand gesorteerd, waarna je met het uniq commando de unieke regels eruit laat halen. Je kunt ook via het uniq commando opvragen hoe vaak bepaalde regels voorkomen.
cat test.html| sort|uniq -c
Je hebt nu 4 lege regels in het bestand en er zijn nogal wat dubbele regels. Hieronder wordt uitgelegd hoe je in 1 keer de dubbele regels eruit kan halen.
cat test.html| sort|uniq -d
Met uniq -d laat je alleen de regels zien die er dubbel in staan.
Kort samengevat
sort bestand Hiermee sorteer je de regels van een bestand (alfabetisch) sort -r bestand Hiermee sorteer je de regels van een bestand (alfabetisch) maar dan van achter naar voren sort -n bestand Hiermee sorteer je de regels van een bestand zowel alfabetisch als numeriek awk '{print $}' Laat een specifiek veld binnen een regel zien cut -c[range] Laat slechts een bepaalde range binnen een regel zien uniq Laat unieke regels binnen een bestand zien uniq -c Telt het aantal dubbele en unieke regels binnen een bestand uniq -d Laat de dubbele regels zien