Awk

Een reeks kolommen afdrukken met het 'awk'-commando

Een reeks kolommen afdrukken met het 'awk'-commando
De opdracht 'awk' is een van de vele opdrachten die kunnen worden gebruikt om een ​​reeks kolommen uit tabelgegevens in Linux af te drukken. Het 'awk'-commando kan rechtstreeks vanaf de terminal worden gebruikt door het 'awk'-scriptbestand uit te voeren. In deze zelfstudie laten we u zien hoe u een reeks kolommen kunt afdrukken vanuit tabelgegevens.

Voorbeeld 1: Druk een reeks kolommen af ​​vanuit een opdrachtuitvoer

De volgende opdracht drukt de tweede, derde en vierde kolom af van de opdrachtuitvoer:, 'ls -l'. Hier worden de kolomnummers expliciet vermeld, maar een efficiëntere opdracht voor het afdrukken van hetzelfde bereik van kolommen wordt in het volgende voorbeeld getoond.

$ ls -l | awk ' print $2, $3, $4 '

De volgende uitvoer wordt geproduceerd door de bovenstaande opdracht:.

Voorbeeld 2: Druk het bereik van kolommen uit een bestand af met a voor lus

Om dit voorbeeld en de andere voorbeelden in deze zelfstudie te volgen, maakt u een tekstbestand met de naam merken.tekst met de volgende inhoud::

ID CSE203 CSE102 CSE202
1109 78 87 79
1167 67 81 70
1190 56 61 69
1156 89 55 78
199 54 66 58

De volgende 'awk'-opdracht drukt de eerste drie kolommen met markeringen af.tekst. De voor lus wordt gebruikt om de kolomwaarden af ​​te drukken, en de lus omvat drie stappen. De NF variabele geeft het totale aantal velden of kolommen van het bestand aan.

$ kattensporen.tekst
$ awk 'for(i=1;i<=NF-1;i++) printf $i" "; print ""' marks.txt

De volgende uitvoer wordt geproduceerd door de opdracht uit te voeren:. De output toont de student ID's en de cijfers voor CSE203 en CSE102.

Voorbeeld 3: Druk het bereik van kolommen af ​​door begin- en eindvariabelen te definiëren

De volgende 'awk'-opdracht drukt de eerste drie kolommen van de opdrachtuitvoer 'ls -l' af door de . te initialiseren beginnend en einde variabelen. Hier, de waarde van de beginnend variabele is 1, en de waarde van de einde variabele is 3. Deze variabelen worden herhaald in een for-lus om de kolomwaarden af ​​te drukken.

$ ls -l | awk ' BEGIN eerste = 1; laatste = 3
voor (i = eerste; i < last; i++) printf("%s ", $i) print $last '

De volgende uitvoer verschijnt na het uitvoeren van de opdracht:. De uitvoer toont de eerste drie kolomwaarden van de uitvoer, 'ls -l'.

Voorbeeld 4: Druk een reeks kolommen af ​​vanuit een bestand met opmaak

Het volgende 'awk'-commando zal de eerste drie kolommen van . afdrukken merken.tekst gebruik makend van printf en uitvoerveldscheidingsteken (OFS). Hier omvat de for-lus drie stappen en worden drie kolommen achter elkaar afgedrukt vanuit het bestand. OFS wordt hier gebruikt om ruimte tussen kolommen toe te voegen. Wanneer de tellerwaarde van de lus (i) gelijk is aan de einde variabele, dan wordt een nieuwe regel(\n) gegenereerd.

$ kattensporen.tekst
$ awk -v start=1 -v end=3 ' voor (i=start; i<=end;i++) printf("%s%s",
$i,(i==einde) ? "\n" : OFS) ' markeringen.tekst

De volgende uitvoer wordt gegenereerd na het uitvoeren van de bovenstaande opdrachten:.

Voorbeeld 5: Druk het bereik van kolommen uit een bestand af met een voorwaardelijke instructie

De volgende 'awk'-opdracht drukt de eerste en laatste kolommen van een bestand af met behulp van een for-lus en een if-statement. Hier omvat de for-lus vier stappen. De beginnend en einde variabelen worden in het script gebruikt om de tweede en derde kolom uit het bestand weg te laten met behulp van de if-voorwaarde. De OFS-variabele wordt gebruikt om ruimte tussen de kolommen toe te voegen en de ORS-variabele wordt gebruikt om een ​​nieuwe regel(\n) toe te voegen na het afdrukken van de laatste kolom.

$ kattensporen.tekst
$ awk -v start=2 -v end=3 ' voor (i=1; i<=NF;i++)
if( i>=start && i<=end) continue;
else printf("%s%s", $i,(i!=NF) ? OFS : ORS) ' merken.tekst

De volgende uitvoer verschijnt na het uitvoeren van de bovenstaande opdrachten:. De uitvoer toont de eerste en laatste kolom met markeringen.tekst.

Voorbeeld 6: Druk het bereik van kolommen uit een bestand af met behulp van de NF-variabele

De volgende 'awk'-opdracht drukt de eerste en laatste kolommen van het bestand af met behulp van een NF-variabele. Er worden geen lussen of voorwaardelijke instructies gebruikt om de kolomwaarden af ​​te drukken. NF geeft het aantal velden aan. Er zijn vier kolommen in tekens.tekst. $(NF-3) definieert de eerste kolom, en $NF geeft de laatste kolom aan.

$ kattensporen.tekst
$ awk 'print $(NF-3)" "$NF' tekens.tekst

De volgende uitvoer wordt geproduceerd door de bovenstaande opdrachten uit te voeren:. De uitvoer toont de eerste en laatste kolom met markeringen.tekst.

Voorbeeld 7: Druk het bereik van kolommen uit een bestand af met substr() en index()

De functie index() retourneert een positie als de tweede argumentwaarde bestaat in de eerste argumentwaarde. De functie substr() kan drie argumenten aannemen:. Het eerste argument is een tekenreekswaarde, het tweede argument is de startpositie en het derde argument is de lengte. Het derde argument van substr() wordt weggelaten in de volgende opdracht:. Omdat de kolom begint bij $1 in het 'awk'-commando, zal de index()-functie $3 teruggeven en het commando zal afdrukken van $3 tot $4.

$ kattensporen.tekst
$ awk 'print substr($0,index($0,$3))' merken.tekst

De volgende uitvoer wordt geproduceerd door de bovenstaande opdrachten uit te voeren:.

Voorbeeld 8: Druk achtereenvolgens een reeks kolommen uit een bestand af met printf

Het volgende 'awk'-commando drukt de eerste, tweede en derde kolom met markeringen af.txt door voldoende ruimte in te stellen voor 10 tekens.

$ kattensporen.tekst
$ awk '//printf "%10s %10s %10s\n",$1,$3,$2 ' merken.tekst

De volgende uitvoer wordt geproduceerd door de bovenstaande opdrachten uit te voeren:.

Conclusie

Er zijn verschillende manieren om het bereik van kolommen af ​​te drukken vanuit de opdrachtuitvoer of een bestand. Deze tutorial laat zien hoe de 'awk'-opdracht Linux-gebruikers kan helpen om inhoud van tabelgegevens af te drukken.

OpenTTD versus Simutrans
Je eigen transportsimulatie maken kan leuk, ontspannend en buitengewoon aanlokkelijk zijn. Daarom moet je ervoor zorgen dat je zoveel mogelijk spellen...
OpenTTD-zelfstudie
OpenTTD is een van de meest populaire simulatiegames voor bedrijven die er zijn. In dit spel moet je een geweldig transportbedrijf creëren. U begint e...
SuperTuxKart voor Linux
SuperTuxKart is een geweldige titel die is ontworpen om je de Mario Kart-ervaring gratis te bieden op je Linux-systeem. Het is behoorlijk uitdagend en...