Awk

Hoe een bestand met strings te splitsen met Awk

Hoe een bestand met strings te splitsen met Awk
De Linux awk-opdracht (afgekort van de namen van de ontwikkelaars; Aho, Weinberger en Kernighan) is een geweldige manier om een ​​bestand met strings te verwerken en te analyseren. Om de bestanden informatiever te maken, moeten ze worden georganiseerd in de vorm van rijen en kolommen. Vervolgens kunt u awk op deze bestanden gebruiken om:

In dit artikel zullen we het basisgebruik van het awk-commando uitleggen en hoe het kan worden gebruikt om een ​​bestand met strings te splitsen. We hebben de voorbeelden uit dit artikel uitgevoerd op een Debian 10 Buster-systeem, maar ze kunnen eenvoudig worden gerepliceerd op de meeste Linux-distributies.

Het voorbeeldbestand dat we gaan gebruiken

Het voorbeeldbestand met tekenreeksen dat we zullen gebruiken om het gebruik van de opdracht awk te demonstreren, is als volgt:

Dit is wat elke kolom van het voorbeeldbestand aangeeft:

Voorbeeld 1: Gebruik Awk om alle regels van een bestand af te drukken

Het afdrukken van elke regel van een gespecificeerd bestand is het standaardgedrag van het awk-commando. In de volgende syntaxis van het awk-commando specificeren we geen patroon dat awk zou moeten afdrukken, dus wordt verondersteld dat het commando de actie "print" toepast op alle regels van het bestand.

Syntaxis:

$ awk 'print' bestandsnaam.tekst

Voorbeeld:

In dit voorbeeld vertel ik de opdracht awk om de inhoud van mijn voorbeeldbestand regel voor regel af te drukken.

$ awk 'print' voorbeeldbestand.tekst

Voorbeeld 2:  Gebruik awk om alleen de lijnen af ​​te drukken die overeenkomen met een bepaald patroon

Met awk kun je een patroon specificeren en de opdracht drukt alleen de regels af die overeenkomen met dat patroon.

Syntaxis:

$ awk '/pattern_to_be_matched/ print' bestandsnaam.tekst

Voorbeeld:

Als ik vanuit het voorbeeldbestand alleen de regel(s) wil afdrukken die de variabele 'B' bevatten, kan ik de volgende opdracht gebruiken:

$ awk '/B/ print' voorbeeldbestand.tekst

Om het voorbeeld zinvoller te maken, wil ik alleen de informatie afdrukken over werknemers die 'professor' zijn.

$ awk '/professor/ print' voorbeeldbestand.tekst

De opdracht drukt alleen de regels/invoer af die de tekenreeks "professor" bevatten, dus we hebben meer waardevolle informatie die is afgeleid van de gegevens.

Voorbeeld 3. Gebruik awk om het bestand te splitsen zodat alleen specifieke velden/kolommen worden afgedrukt

In plaats van het hele bestand af te drukken, kun je awk maken om alleen specifieke kolommen van het bestand af te drukken. Awk behandelt standaard alle woorden, gescheiden door witruimte, in een regel als een kolomrecord. Het slaat het record op in een $N variabele. Waar $1 het eerste woord vertegenwoordigt, $2 slaat het tweede woord op, $3 het vierde, enzovoort fourth. $0 slaat de hele regel op zodat de who-regel wordt afgedrukt, zoals uitgelegd in voorbeeld 1.

Syntaxis:

$ awk 'print $N,… .' bestandsnaam.tekst

Voorbeeld:

Met de volgende opdracht worden alleen de eerste kolom (naam) en de tweede kolom (onderwerp) van mijn voorbeeldbestand afgedrukt:

$ awk 'print $1, $2' voorbeeldbestand.tekst

Voorbeeld 4: Gebruik Awk om het aantal regels te tellen en af ​​te drukken waarin een patroon overeenkomt

U kunt awk vertellen om het aantal regels te tellen waarin een bepaald patroon overeenkomt en vervolgens dat 'aantal' uit te voeren.

Syntaxis:

$ awk '/pattern_to_be_matched/++cnt END print "Count = ", cnt'
bestandsnaam.tekst

Voorbeeld:

In dit voorbeeld wil ik het aantal personen tellen dat het vak "Engels" doceert. Daarom zal ik het awk-commando vertellen dat het overeenkomt met het patroon "engels" en het aantal regels afdrukken waarin dit patroon overeenkomt.

$ awk '/english/++cnt END print "Count = ", cnt' voorbeeldbestand.tekst

De telling hier suggereert dat 2 mensen Engels leren uit de voorbeeldbestandsrecords.

Voorbeeld 5: Gebruik awk om alleen regels met meer dan een bepaald aantal tekens af te drukken

Voor deze taak gebruiken we de ingebouwde awk-functie genaamd "lengte". Deze functie retourneert de lengte van de invoerreeks. Dus als we willen dat awk alleen regels afdrukt met meer dan of zelfs minder dan het aantal tekens, kunnen we de lengtefunctie op de volgende manier gebruiken:

Voor het afdrukken van regels met tekens groter dan een getal:

$ awk 'length($0) > n' bestandsnaam.tekst

Voor het afdrukken van regels met tekens die kleiner zijn dan een getal:

$ awk 'lengte ($ 0) < n' filename.txt

Waarbij n het aantal tekens is dat u voor een regel wilt opgeven.

Voorbeeld:

Met de volgende opdracht worden alleen de regels uit mijn voorbeeldbestand afgedrukt die meer dan 30 tekens bevatten:

$ awk 'lengte ($ 0) > 30' voorbeeldbestand.tekst

Voorbeeld 6: Gebruik awk om de uitvoer van de opdracht in een ander bestand op te slaan

Door de omleidingsoperator '>' te gebruiken, kunt u het awk-commando gebruiken om de uitvoer naar een ander bestand af te drukken. Dit is de manier waarop je het kunt gebruiken:

$ awk 'criteria_to_print' bestandsnaam.txt > uitvoerbestand.tekst

Voorbeeld:

In dit voorbeeld gebruik ik de omleidingsoperator met mijn awk-opdracht om alleen de namen van de werknemers (kolom 1) naar een nieuw bestand af te drukken:

$ awk 'print $1' voorbeeldbestand.txt > werknemer_namen.tekst

Ik heb via de cat-commando's geverifieerd dat het nieuwe bestand alleen de namen van de werknemers bevat.

Voorbeeld 7: Gebruik awk om alleen niet-lege regels uit een bestand af te drukken

Awk heeft een aantal ingebouwde commando's die je kunt gebruiken om de uitvoer te filteren. Het NF-commando wordt bijvoorbeeld gebruikt om een ​​telling bij te houden van de velden binnen het huidige invoerrecord. Hier zullen we het NF-commando gebruiken om alleen de niet-lege regels van het bestand af te drukken:

$ awk 'NF > 0' voorbeeldbestand.tekst

Uiteraard kunt u de volgende opdracht gebruiken om de lege regels af te drukken:

$ awk 'NF < 0' sample_file.txt

Voorbeeld 8: Gebruik awk om het totaal aantal regels in een bestand te tellen

Een andere ingebouwde functie genaamd NR houdt het aantal invoerrecords (meestal regels) van een bepaald bestand bij a. U kunt deze functie in awk als volgt gebruiken om het aantal regels in een bestand te tellen:

$ awk 'END print NR ' voorbeeldbestand.tekst

Dit was de basisinformatie die je nodig hebt om te beginnen met het splitsen van bestanden met het awk-commando. Je kunt de combinatie van deze voorbeelden gebruiken om via awk . meer betekenisvolle informatie uit je string-bestand te halen.

Hoe de GameConqueror Cheat Engine in Linux te gebruiken
Het artikel bevat een handleiding over het gebruik van de GameConqueror cheat-engine in Linux. Veel gebruikers die games op Windows spelen, gebruiken ...
Beste gameconsole-emulators voor Linux
Dit artikel bevat een lijst van populaire emulatiesoftware voor gameconsoles die beschikbaar is voor Linux. Emulatie is een softwarecompatibiliteitsla...
Beste Linux-distributies voor gaming in 2021
Het Linux-besturingssysteem heeft een lange weg afgelegd van zijn oorspronkelijke, eenvoudige, servergebaseerde uiterlijk. Dit besturingssysteem is de...