- Skanna filerna, rad för rad.
- Dela upp varje rad i fält / kolumner.
- Ange mönster och jämför filraderna med dessa mönster
- Utför olika åtgärder på de linjer som matchar ett visst mönster
I den här artikeln kommer vi att förklara den grundläggande användningen av awk-kommandot och hur det kan användas för att dela en fil av strängar. Vi har utfört exemplen från den här artikeln på ett Debian 10 Buster-system men de kan enkelt replikeras på de flesta Linux-distributioner.
Exempelfilen vi kommer att använda
Exempelfilen för strängar som vi kommer att använda för att visa användningen av awk-kommandot är följande:
Det här är vad varje kolumn i exempelfilen anger:
- Den första kolumnen innehåller namnet på anställda / lärare i en skola
- Den andra kolumnen innehåller ämnet som den anställde undervisar i
- Den tredje kolumnen anger om den anställde är professor eller biträdande professor
- Den fjärde kolumnen innehåller anställdas lön
Exempel 1: Använd Awk för att skriva ut alla rader i en fil
Att skriva ut varje rad i en specifik fil är standardbeteendet för awk-kommandot. I följande syntax för awk-kommandot specificerar vi inte något mönster som awk ska skriva ut, så kommandot är tänkt att tillämpa "print" -åtgärden på alla rader i filen.
Syntax:
$ awk 'print' filnamn.TextExempel:
I det här exemplet säger jag till awk-kommandot att skriva ut innehållet i min exempelfil, rad för rad.
$ awk 'print' exempelfil.Text
Exempel 2: Använd awk för att bara skriva ut de rader som matchar ett visst mönster
Med awk kan du ange ett mönster och kommandot skriver bara ut de rader som matchar det mönstret.
Syntax:
$ awk '/ pattern_to_be_matched / print' filnamn.TextExempel:
Om jag bara vill skriva ut de (n) rad (ar) som innehåller variabeln "B" kan jag använda följande kommando:
$ awk '/ B / print' exempelfil.Text
För att göra exemplet mer meningsfullt, låt mig bara skriva ut informationen om anställda som är professor.
$ awk '/ professor / print' exempelfil.Text
Kommandot skriver bara ut de rader / poster som innehåller strängen "professor" så vi har mer värdefull information härledd från data.
Exempel 3. Använd awk för att dela upp filen så att endast specifika fält / kolumner skrivs ut
Istället för att skriva ut hela filen kan du göra det svårt att bara skriva ut specifika kolumner i filen. Awk behandlar alla ord, åtskilda av mellanslag, i en rad som en kolumnpost som standard. Den lagrar posten i en $ N-variabel. Där $ 1 representerar det första ordet, lagrar $ 2 det andra ordet, $ 3 det fjärde och så vidare. $ 0 lagrar hela raden så vem-raden skrivs ut, som förklaras i exempel 1.
Syntax:
$ awk 'skriv ut $ N, .. .' filnamn.TextExempel:
Följande kommando skriver bara ut den första kolumnen (namn) och den andra kolumnen (ämne) i min exempelfil:
$ awk 'print $ 1, $ 2' sample_file.Text
Exempel 4: Använd Awk för att räkna och skriva ut antalet rader där ett mönster matchas
Du kan be awk att räkna antalet rader där ett angivet mönster matchas och sedan mata ut det "räkna".
Syntax:
$ awk '/ pattern_to_be_matched / ++ cnt END print "Count =", cnt'filnamn.Text
Exempel:
I det här exemplet vill jag räkna antalet personer som undervisar ämnet "engelska". Därför säger jag till kommandot awk att matcha mönstret "engelska" och skriva ut antalet rader där mönstret matchas.
$ awk '/ engelska / ++ cnt END print "Count =", cnt' sample_file.Text
Räkningen här föreslår att 2 personer undervisar engelska från exempelfilen.
Exempel 5: Använd awk för att bara skriva ut rader med mer än ett specifikt antal tecken
För denna uppgift kommer vi att använda den inbyggda awk-funktionen som kallas "längd". Den här funktionen returnerar längden på inmatningssträngen. Således, om vi bara vill skriva ut rader med mer än eller till och med mindre än antalet tecken kan vi använda längdfunktionen på följande sätt:
För att skriva ut linjer med tecken som är större än ett tal:
$ awk 'längd ($ 0)> n' filnamn.TextFör att skriva ut linjer med tecken mindre än ett tal:
$ awk-längd ($ 0) < n' filename.txtDär n är antalet tecken som du vill ange för en rad.
Exempel:
Följande kommando skriver bara ut raderna från min exempelfil som har tecken mer än 30:
$ awk 'längd ($ 0)> 30' sample_file.Text
Exempel 6: Använd awk för att spara kommandoutgången till en annan fil
Genom att använda omdirigeringsoperatören '>' kan du använda kommandot awk för att skriva ut utdata till en annan fil. Så här kan du använda den:
$ awk 'criteria_to_print "filnamn.txt> utdatafil.TextExempel:
I det här exemplet kommer jag att använda omdirigeringsoperatören med mitt awk-kommando för att bara skriva ut namnen på de anställda (kolumn 1) till en ny fil:
$ awk 'print $ 1' sample_file.txt> medarbetarnamn.Text
Jag bekräftade genom kattkommandona att den nya filen bara innehåller namnen på de anställda.
Exempel 7: Använd awk för att bara skriva ut icke-tomma rader från en fil
Awk har några inbyggda kommandon som du kan använda för att filtrera utdata. Till exempel används NF-kommandot för att hålla ett antal av fälten inom den aktuella ingångsposten. Här använder vi kommandot NF för att bara skriva ut de icke-tomma raderna i filen:
$ awk 'NF> 0' sample_file.TextUppenbarligen kan du använda följande kommando för att skriva ut de tomma raderna:
$ awk 'NF < 0' sample_file.txtExempel 8: Använd awk för att räkna de totala raderna i en fil
En annan inbyggd funktion, kallad NR, räknar antalet ingångsposter (vanligtvis rader) för en viss fil. Du kan använda den här funktionen i awk som följer för att räkna antalet rader i en fil:
$ awk 'END print NR' sample_file.Text
Detta var den grundläggande informationen du behöver för att börja med att dela filer med kommandot awk. Du kan använda kombinationen av dessa exempel för att hämta mer meningsfull information från din fil av strängar genom awk.