Awk

Hur man använder AWK på Linux

Hur man använder AWK på Linux

Verktygen som Linux erbjuder följer ofta UNIX-designfilosofin. Alla verktyg ska vara små, använda vanlig text för I / O och fungera på ett modulärt sätt. Tack vare arvet har vi några av de finaste textbehandlingsfunktionerna med hjälp av verktyg som sed och awk.

I Linux är awk-verktyget förinstallerat på alla Linux-distros. AWK själv är ett programmeringsspråk. AWK-verktyget är bara en tolk för AWK-programmeringsspråket. I den här guiden, kolla in hur du använder AWK på Linux.

AWK-användning

AWK-verktyget är mest användbart när texter är ordnade i ett förutsägbart format. Det är ganska bra att analysera och manipulera tabelldata. Det fungerar rad för rad på hela textfilen.

Awks standardbeteende är att använda blanksteg (mellanslag, flikar, etc.) för att separera fält. Tack och lov följer många av konfigurationsfilerna på Linux detta mönster.

Grundläggande syntax

Så här ser kommandostrukturen till awk ut.

$ awk '// ; ; '

Delarna av kommandot är ganska självförklarande. Awk kan fungera utan sök- eller åtgärdsdelen. Om inget anges är standardåtgärden på matchningen bara utskrift. I grund och botten kommer awk att skriva ut alla matchningar som finns i filen.

Om det inte finns något sökmönster specificerat kommer awk att utföra de angivna åtgärderna på varje enskild rad i filen.

Om båda delarna ges, kommer awk att använda mönstret för att avgöra om den aktuella linjen återspeglar den. Om det matchas utför awk den angivna åtgärden.

Observera att awk också kan fungera på omdirigerade texter. Detta kan uppnås genom att pipa innehållet i kommandot för att besvära att agera. Läs mer om Linux-rörkommandot.

För demoändamål är här en exempeltextfil. Den innehåller 10 rader, 2 ord per rad.

$ kattprov.Text

Vanligt uttryck

En av de viktigaste funktionerna som gör awk till ett kraftfullt verktyg är stödet för reguljära uttryck (regex, för kort). Ett reguljärt uttryck är en sträng som representerar ett visst teckenmönster.

Här är en lista över några av de vanligaste syntaxerna för reguljära uttryck. Dessa regex-syntaxer är inte bara unika för awk. Dessa är nästan universella regex-syntaxer, så att behärska dem kommer också att hjälpa till i andra appar / programmering som innebär regelbundet uttryck.

  • Grundläggande karaktärer: Alla alfanumeriska tecken understryker (_) osv.
    • Teckenuppsättning: För att göra saker enklare finns det teckengrupper i regex. Till exempel versaler (A-Z), gemener (a-z) och numeriska siffror (0-9).
  • Metakaraktärer: Dessa är karaktärer som förklarar olika sätt att utöka de vanliga karaktärerna.
    • Period (.): Alla teckenmatchningar i positionen är giltiga (förutom en ny rad).
    • Asterisk (*): Noll eller flera existenser av den omedelbara karaktären före den är giltiga.
    • Fäste ([]): Matchningen är giltig om någon av karaktärerna från parentes på positionen matchas. Det kan kombineras med teckenuppsättningar.
    • Vakt (^): Matchen måste vara i början av linjen.
    • Dollar ($): Matchen måste vara i slutet av raden.
    • Backslash (\): Om någon metakaraktär måste användas i bokstavlig mening.

Skriva ut texten

För att skriva ut allt innehåll i en textfil, använd utskriftskommandot. När det gäller sökmönstret finns inget mönster definierat. Så awk skriver ut alla rader.

$ awk 'print' - exempel.Text

Här är "skriv ut" ett AWK-kommando som skriver ut innehållet i ingången.

Strängsökning

AWK kan utföra en grundläggande textsökning på den angivna texten. I mönstret måste det vara texten att hitta.

I följande kommando söker awk efter texten "snabb" på alla rader i filexemplet.Text.

$ awk '/ quick /' sample.Text

Låt oss nu använda några reguljära uttryck för att ytterligare finjustera sökningen. Följande kommando skriver ut alla rader som har "brun" i början.

$ awk '/ ^ brown /' prov.Text

Vad sägs om att hitta något i slutet av en rad? Följande kommando skriver ut alla rader som har "snabb" i slutet.

$ awk '/ snabbt $ /' prov.Text

Vilda kort mönster

Nästa exempel kommer att visa upp användningen av vagnen (.). Här kan det finnas två tecken före tecknet "e".

$ awk '/… e /' prov.Text

Vildkortsmönster (med asterisk)

Vad händer om det kan finnas ett antal tecken på platsen? För att matcha alla möjliga karaktärer på positionen, använd asterisken (*). Här kommer AWK att matcha alla rader som har vilken mängd tecken som helst efter "the".

$ awk '/ * /' provet.Text

Fästeuttryck

Följande exempel visar hur du använder parentesuttrycket. Parentesuttryck berättar att matchen är giltig på platsen om den matchar den uppsättning tecken som ligger inom parenteserna. Till exempel kommer följande kommando att matcha "The" och "Tee" som giltiga matchningar.

$ awk '/ T [he] e /' prov.Text

Det finns några fördefinierade teckenuppsättningar i det reguljära uttrycket. Till exempel är uppsättningen av alla stora bokstäver märkta som “A-Z”. I följande kommando matchar awk alla ord som innehåller en stor bokstav.

$ awk '/ [A-Z] /' prov.Text

Ta en titt på följande användning av teckenuppsättningar med parentesuttryck.

  • [0-9]: Indikerar en enda siffra
  • [a-z]: Indikerar en liten bokstav
  • [A-Z]: Indikerar en enkel versal
  • [a-zA-z]: Indikerar en enda bokstav
  • [a-zA-z 0-9]: Indikerar ett enstaka tecken eller en siffra.

Awk fördefinierade variabler

AWK levereras med en massa fördefinierade och automatiska variabler. Dessa variabler kan göra det lättare att skriva program och skript med AWK.

Här är några av de vanligaste AWK-variablerna som du kommer att stöta på.

  • FILNAMN: Filnamnet på den aktuella inmatningsfilen.
  • RS: Skivavskiljaren. På grund av AWK: s natur bearbetar den data en post i taget. Här specificerar denna variabel avgränsaren som används för att dela dataströmmen i poster. Som standard är detta värde den nya linjetecknet.
  • NR: Det aktuella inmatade postnumret. Om RS-värdet är inställt som standard kommer detta värde att indikera det aktuella ingångsraden.
  • FS / OFS: Tecken som används som fältseparator. Efter att ha läst delar AWK en post i olika fält. Avgränsaren definieras av värdet på FS. Vid utskrift sammanfogar AWK alla fält. Vid denna tidpunkt använder AWK emellertid OFS-separatorn istället för FS-separatorn. I allmänhet är både FS och OFS desamma men inte obligatoriska att vara så.
  • NF: Antalet fält i den aktuella posten. Om standardvärdet "blanksteg" används matchar det antalet ord i den aktuella posten.
  • ORS: Record separator för utdata. Standardvärdet är den nya linjetecknet.

Låt oss kontrollera dem i aktion. Följande kommando använder NR-variabeln för att skriva ut rad 2 till rad 4 från exempel.Text. AWK stöder också logiska operatörer som logiska och (&&).

$ awk 'NR> 1 && NR < 5' sample.txt

För att tilldela ett specifikt värde till en AWK-variabel, använd följande struktur.

$ awk '// ; ; ' =,

För att till exempel ta bort alla tomma rader från inmatningsfilen, ändra värdet på RS till i princip ingenting. Det är ett trick som använder en obskur POSIX-regel. Det specificerar att om värdet på RS är en tom sträng, så separeras poster med en sekvens som består av en ny rad med en eller flera tomma rader. I POSIX är en tom rad utan innehåll helt tom. Men om raden innehåller blanksteg anses den inte vara "tom".

$ awk 'print' RS = "prov.Text

Ytterligare resurser

AWK är ett kraftfullt verktyg med massor av funktioner. Medan den här guiden täcker många av dem är det fortfarande bara grunderna. Att behärska AWK tar mer än bara detta. Den här guiden bör vara en bra introduktion till verktyget.

Om du verkligen vill behärska verktyget, här är några ytterligare resurser du bör kolla in.

  • Trimma mellanslag
  • Använda ett villkorligt uttalande
  • Skriv ut ett antal kolumner
  • Regex med AWK
  • 20 AWK-exempel

Internet är en ganska bra plats att lära sig något. Det finns många fantastiska handledning om AWK-grunderna för mycket avancerade användare.

Slutlig tanke

Förhoppningsvis hjälpte den här guiden att ge en god förståelse för AWK-grunderna. Även om det kan ta ett tag är det mycket givande att bemästra AWK när det gäller den kraft det ger.

Happy computing!

Vulkan för Linux-användare
Med varje ny generation grafikkort ser vi spelutvecklare driva gränserna för grafisk trohet och komma ett steg närmare fotorealism. Men trots all kred...
OpenTTD vs Simutrans
Att skapa din egen transportsimulering kan vara rolig, avkopplande och extremt lockande. Det är därför du måste se till att du testar så många spel so...
OpenTTD-handledning
OpenTTD är ett av de mest populära affärssimuleringsspelen där ute. I det här spelet måste du skapa en underbar transportaffär. Du kommer dock att bör...