Zoeken op website

Hoe Awk-invoer van STDIN in Linux te lezen - Deel 7


In de vorige delen van de Awk-toolserie hebben we gekeken naar het lezen van invoer uit een of meer bestanden, maar wat als je invoer uit STDIN wilt lezen.

In dit deel 7 van de Awk-serie zullen we enkele voorbeelden bekijken waarin u de uitvoer van andere opdrachten kunt filteren in plaats van de invoer uit een bestand te lezen.

We zullen beginnen met het dir-hulpprogramma dat vergelijkbaar is met het ls-commando. In het eerste voorbeeld hieronder gebruiken we de uitvoer van het dir -l-commando als invoer voor Awk om de gebruikersnaam, de groepsnaam en de bestanden van de eigenaar af te drukken. /zij bezit in de huidige map:

dir -l | awk '{print $3, $4, $9;}'

Kijk eens naar een ander voorbeeld waarin we awk-expressies gebruiken. Hier willen we bestanden afdrukken die eigendom zijn van de root-gebruiker door een expressie te gebruiken om tekenreeksen te filteren, zoals in het onderstaande awk-commando:

dir -l | awk '$3=="root" {print $1,$3,$4, $9;} '

De bovenstaande opdracht bevat de vergelijkingsoperator (==) om ons te helpen bestanden in de huidige map eruit te filteren die eigendom zijn van de rootgebruiker. Dit wordt bereikt met behulp van de uitdrukking $3== ”root ”.

Laten we eens kijken naar een ander voorbeeld waarbij we een awk-vergelijkingsoperator gebruiken om een bepaalde string te matchen.

Hier hebben we het cat-hulpprogramma gebruikt om de inhoud van een bestand met de naam tecmint_deals.txt te bekijken en we willen alleen de deals van het type Tech bekijken, dus we zullen de volgende commando's:

cat tecmint_deals.txt
cat tecmint_deals.txt | awk '$4 ~ /tech/{print}'
cat tecmint_deals.txt | awk '$4 ~ /Tech/{print}'

In het bovenstaande voorbeeld hebben we de vergelijkingsoperator ~ /pattern/ gebruikt, maar er zijn twee commando's om te proberen iets heel belangrijks naar voren te brengen.

Wanneer je de opdracht uitvoert met patroon tech wordt er niets afgedrukt omdat er geen deal van dat type is, maar met Tech krijg je deals van typ Tech.

Wees dus altijd voorzichtig bij het gebruik van deze vergelijkingsoperator, deze is hoofdlettergevoelig, zoals we hierboven hebben gezien.

Je kunt in plaats daarvan altijd de uitvoer van een ander commando gebruiken als invoer voor awk in plaats van de invoer uit een bestand te lezen. Dit is heel eenvoudig zoals we in de bovenstaande voorbeelden hebben bekeken.

Ik hoop dat de voorbeelden duidelijk genoeg zijn om te begrijpen. Als u zich zorgen maakt, kunt u deze uiten via het commentaargedeelte hieronder en vergeet niet om het volgende deel van de serie te raadplegen, waar we zullen kijken naar awk functies zoals variabelen, numerieke expressies en toewijzingsoperatoren.