Awk

AWK gebruiken op Linux

AWK gebruiken op Linux

De hulpprogramma's die Linux aanbiedt, volgen vaak de UNIX-filosofie van ontwerp. Elke tool moet klein zijn, platte tekst gebruiken voor I/O en modulair werken. Dankzij de legacy hebben we enkele van de beste tekstverwerkingsfunctionaliteiten met behulp van tools zoals sed en awk.

In Linux is de awk-tool vooraf geïnstalleerd op alle Linux-distributies. AWK zelf is een programmeertaal. De AWK-tool is slechts een tolk van de AWK-programmeertaal. Bekijk in deze handleiding hoe u AWK op Linux gebruikt.

AWK-gebruik

De AWK-tool is vooral handig wanneer teksten in een voorspelbaar formaat zijn geordend. Het is best goed in het ontleden en manipuleren van tabelgegevens. Het werkt regel voor regel, op het hele tekstbestand.

Het standaardgedrag van awk is het gebruik van spaties (spaties, tabbladen, enz.).) voor het scheiden van velden. Gelukkig volgen veel van de configuratiebestanden op Linux dit patroon.

Basissyntaxis

Zo ziet de commandostructuur van awk eruit.

$ awk '// ; ; '

De delen van het commando spreken voor zich. Awk kan werken zonder het zoek- of actiegedeelte. Als er niets is opgegeven, is de standaardactie voor de wedstrijd gewoon afdrukken. Kortom, awk zal alle gevonden overeenkomsten in het bestand afdrukken.

Als er geen zoekpatroon is opgegeven, voert awk de opgegeven acties uit op elke regel van het bestand.

Als beide delen worden gegeven, zal awk het patroon gebruiken om te bepalen of de huidige lijn het weerspiegelt. Indien gematcht, voert awk de gespecificeerde actie uit.

Merk op dat awk ook kan werken op omgeleide teksten. Dit kan worden bereikt door de inhoud van de opdracht door te sturen naar awk om op te reageren. Meer informatie over het Linux pipe-commando.

Voor demo-doeleinden is hier een voorbeeldtekstbestand:. Het bevat 10 regels, 2 woorden per regel.

$ kattenmonster.tekst

Reguliere expressie

Een van de belangrijkste kenmerken die van awk een krachtig hulpmiddel maken, is de ondersteuning van reguliere expressie (kortweg regex). Een reguliere expressie is een tekenreeks die een bepaald patroon van tekens vertegenwoordigt.

Hier is een lijst met enkele van de meest voorkomende syntaxis voor reguliere expressies. Deze regex-syntaxis is niet alleen uniek voor awk. Dit zijn bijna universele regex-syntaxis, dus het beheersen ervan zal ook helpen bij andere apps/programmering waarbij reguliere expressie betrokken is.

  • Basiskarakters: Alle alfanumerieke tekens onderstrepingstekens (_) enz.
    • Tekenset: om het u gemakkelijker te maken, zijn er tekengroepen in de regex. Bijvoorbeeld hoofdletters (A-Z), kleine letters (a-z) en numerieke cijfers (0-9).
  • Meta-tekens: Dit zijn karakters die verschillende manieren uitleggen om de gewone karakters uit te breiden.
    • Periode (.): Elke tekenovereenkomst in de positie is geldig (behalve een nieuwe regel).
    • Sterretje (*): Nul of meer bestaan ​​van het onmiddellijke teken dat eraan voorafgaat, is geldig.
    • Haakje ([]): De overeenkomst is geldig als, op de positie, een van de tekens uit de haakjes overeenkomt. Het kan worden gecombineerd met tekensets.
    • Caret (^): De wedstrijd moet aan het begin van de lijn zijn.
    • Dollar ($): De wedstrijd moet aan het einde van de lijn zijn.
    • Backslash (\): Als een meta-teken in letterlijke zin moet worden gebruikt.

De tekst afdrukken

Om alle inhoud van een tekstbestand af te drukken, gebruik je het print commando. In het geval van het zoekpatroon is er geen patroon gedefinieerd. Dus, awk drukt alle regels af.

$ awk 'print' voorbeeld.tekst

Hier is "print" een AWK-opdracht die de inhoud van de invoer afdrukt.

String zoeken

AWK kan een eenvoudige tekstzoekopdracht uitvoeren op de gegeven tekst. In het patroongedeelte moet het de tekst zijn om te vinden.

In de volgende opdracht zoekt awk naar de tekst "quick" op alle regels van het bestandsvoorbeeld.tekst.

$ awk '/quick/' voorbeeld.tekst

Laten we nu enkele reguliere expressies gebruiken om de zoekopdracht verder te verfijnen. Met de volgende opdracht worden alle regels afgedrukt die aan het begin "bruin" hebben.

$ awk '/^brown/' voorbeeld.tekst

Hoe zit het met het vinden van iets aan het einde van een regel?? Met de volgende opdracht worden alle regels afgedrukt die aan het einde "snel" hebben.

$ awk '/quick$/' voorbeeld.tekst

Wild card patroon

In het volgende voorbeeld wordt het gebruik van het caret (.). Hier kunnen twee tekens vóór het teken "e" staan.

$ awk '/… e/'  voorbeeld.tekst

Wildcardpatroon (met asterisk)

Wat als er een willekeurig aantal tekens op de locatie kan zijn?? Gebruik de asterisk (*) om te matchen met een mogelijk teken op de positie. Hier komt AWK overeen met alle regels met een willekeurig aantal tekens na "de".

$ awk '/the*/' voorbeeld.tekst

Uitdrukking haakjes

In het volgende voorbeeld wordt getoond hoe u de uitdrukking voor haakjes gebruikt. Uitdrukking voor haakjes geeft aan dat de overeenkomst op de locatie geldig is als deze overeenkomt met de reeks tekens tussen haakjes. De volgende opdracht komt bijvoorbeeld overeen met "The" en "Tee" als geldige overeenkomsten.

$ awk '/T[he]e/' voorbeeld.tekst

Er zijn enkele voorgedefinieerde tekensets in de reguliere expressie. De set van alle hoofdletters wordt bijvoorbeeld aangeduid als "A-Z". In de volgende opdracht komt awk overeen met alle woorden die een hoofdletter bevatten.

$ awk '/[A-Z]/' voorbeeld.tekst

Kijk eens naar het volgende gebruik van tekensets met haakjesuitdrukking:.

  • [0-9]: Geeft een enkel cijfer aan
  • [a-z]: geeft een enkele kleine letter aan
  • [A-Z]: Geeft een enkele hoofdletter aan
  • [a-zA-z]: Geeft een enkele letter aan
  • [a-zA-z 0-9]: Geeft een enkel teken of cijfer aan.

Awk vooraf gedefinieerde variabelen

AWK wordt geleverd met een aantal vooraf gedefinieerde en automatische variabelen. Deze variabelen kunnen het schrijven van programma's en scripts met AWK eenvoudiger maken.

Hier zijn enkele van de meest voorkomende AWK-variabelen die u tegenkomt:.

  • BESTANDSNAAM: De bestandsnaam van het huidige invoerbestand.
  • RS: Het recordscheidingsteken. Vanwege de aard van AWK worden gegevens record voor record verwerkt. Hier specificeert deze variabele het scheidingsteken dat wordt gebruikt voor het splitsen van de gegevensstroom in records. Standaard is deze waarde het teken van de nieuwe regel.
  • NR: Het huidige invoerrecordnummer. Als de RS-waarde is ingesteld op standaard, geeft deze waarde het huidige invoerregelnummer aan.
  • FS/OFS: Het teken/de tekens die worden gebruikt als veldscheidingsteken. Eenmaal gelezen, splitst AWK een record op in verschillende velden. Het scheidingsteken wordt gedefinieerd door de waarde van FS. Bij het afdrukken voegt AWK alle velden weer samen. Op dit moment gebruikt AWK echter het OFS-scheidingsteken in plaats van het FS-scheidingsteken. Over het algemeen zijn zowel FS als OFS hetzelfde, maar niet verplicht om zo te zijn.
  • NF: Het aantal velden in het huidige record. Als de standaardwaarde "witruimte" wordt gebruikt, komt deze overeen met het aantal woorden in het huidige record.
  • ORS: Het recordscheidingsteken voor de uitvoergegevens. De standaardwaarde is het teken van de nieuwe regel.

Laten we ze in actie bekijken. De volgende opdracht gebruikt de NR-variabele om regel 2 naar regel 4 uit voorbeeld af te drukken.tekst. AWK ondersteunt ook logische operatoren zoals logische en (&&).

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

Gebruik de volgende structuur om een ​​specifieke waarde toe te wijzen aan een AWK-variabele:.

$ awk '// ; ; ' =,

Als u bijvoorbeeld alle lege regels uit het invoerbestand wilt verwijderen, wijzigt u de waarde van RS in in principe niets. Het is een truc die een obscure POSIX-regel gebruikt. Het specificeert dat als de waarde van RS een lege tekenreeks is, records worden gescheiden door een reeks die bestaat uit een nieuwe regel met een of meer lege regels. In POSIX is een lege regel zonder inhoud helemaal leeg. Als de regel echter spaties bevat, wordt deze niet als "leeg" beschouwd.

$ awk 'print' RS=" voorbeeld.tekst

Aanvullende bronnen

AWK is een krachtige tool met tal van functies. Hoewel deze gids veel van hen behandelt, is het nog steeds slechts de basis. Voor het beheersen van AWK is meer nodig dan alleen dit. Deze gids zou een mooie introductie tot de tool moeten zijn.

Als je de tool echt onder de knie wilt krijgen, dan zijn hier enkele aanvullende bronnen die je moet bekijken.

  • Witruimte bijsnijden
  • Een voorwaardelijke instructie gebruiken
  • Een reeks kolommen afdrukken
  • Regex met AWK
  • 20 AWK-voorbeelden

Internet is best een goede plek om iets te leren. Er zijn tal van geweldige tutorials over AWK-basics voor zeer geavanceerde gebruikers.

laatste gedachte

Hopelijk heeft deze gids bijgedragen aan een goed begrip van de basisprincipes van AWK. Hoewel het een tijdje kan duren, is het beheersen van AWK buitengewoon de moeite waard in termen van de kracht die het geeft.

Veel computerplezier!

Hoe u uw gamesessie op Linux kunt vastleggen en streamen
In het verleden werd het spelen van games alleen als een hobby beschouwd, maar met de tijd zag de game-industrie een enorme groei in termen van techno...
Beste spellen om te spelen met handtracking
Oculus Quest introduceerde onlangs het geweldige idee van handtracking zonder controllers. Met een steeds toenemend aantal games en activiteiten die f...
OSD-overlay tonen in Linux-apps en -games op volledig scherm
Het spelen van games op volledig scherm of het gebruik van apps in de modus volledig scherm zonder afleiding kan u afsnijden van relevante systeeminfo...