V této příručce pro začátečníky se naučíte úplné základy awk příkaz. Uvidíte také některé ze způsobů, jak jej můžete použít při práci s textem.
Začněme!
Co je awk příkaz?
awk je skriptovací jazyk a je užitečný při práci v příkazovém řádku. Je to také široce používaný příkaz pro zpracování textu.
Při použití awk , můžete vybrat data – jeden nebo více kusů jednotlivého textu – na základě vámi poskytnutého vzoru.
Například některé operace, které můžete provádět pomocí awk hledáte konkrétní slovo nebo vzor v zadaném textu, nebo dokonce vyberete určitý řádek nebo určitý sloupec v souboru, který poskytnete.
Základní syntaxe awk příkaz
Ve své nejjednodušší podobě, awk za příkazem následuje sada jednoduchých uvozovek a sada složených závorek s názvem souboru, který chcete prohledávat, zmíněným jako poslední.
Vypadá to nějak takto:
awk '{action}' your_file_name.txt
Když chcete vyhledat text, který má určitý vzor nebo hledáte v textu konkrétní slovo, příkaz bude vypadat nějak takto:
awk '/regex pattern/{action}' your_file_name.txt
Jak vytvořit ukázkový soubor
Chcete-li vytvořit soubor v příkazovém řádku, použijte touch příkaz.
Například:touch filename.txt kde filename , je název vašeho souboru.
Poté můžete použít open příkaz (open filename.txt ) a otevře se textový editor, jako je TextEdit, kam můžete přidat obsah souboru.
Řekněme, že máte textový soubor information.txt , který obsahuje data rozdělená do různých sloupců.
Obsah souboru může vypadat nějak takto:
fristName lastName age city ID
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Wood Tinker 54 Lisbon N/A
Giorgos Georgiou 35 London 300
Timmy Turner 32 Berlin N/A
V mém příkladu je jeden sloupec pro firstName , lastName , age , city a ID .
Kdykoli si můžete zobrazit výstup obsahu svého souboru zadáním cat text_file , kde text_file je název vašeho souboru.
Jak vytisknout veškerý obsah souboru pomocí awk
Chcete-li vytisknout vše obsah souboru, akce, kterou určíte uvnitř složených závorek, je print $0 .
Bude to fungovat úplně stejně jako cat dříve zmíněný příkaz.
awk '{print $0}' information.txt
Výstup:
fristName lastName age city ID
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Wood Tinker 54 Lisbon N/A
Giorgos Georgiou 35 London 300
Timmy Turner 32 Berlin N/A
Pokud chcete, aby každý řádek měl počet řádků, použijte NR vestavěná proměnná:
awk '{print NR,$0}' information.txt
1 fristName lastName age city ID
2
3 Thomas Shelby 30 Rio 400
4 Omega Night 45 Ontario 600
5 Wood Tinker 54 Lisbon N/A
6 Giorgos Georgiou 35 London 300
7 Timmy Turner 32 Berlin N/A
Jak vytisknout konkrétní sloupce pomocí awk
Při použití awk , můžete určit určité sloupce, které chcete vytisknout.
Chcete-li vytisknout první sloupec, použijte příkaz:
awk '{print $1}' information.txt
Výstup:
Thomas
Omega
Wood
Giorgos
Timmy
$1 znamená první pole, v tomto případě první sloupec.
Pro tisk druhého sloupce byste použili $2 :
awk '{print $2}' information.txt
Výstup:
lastName
Shelby
Night
Tinker
Georgiou
Turner
Způsob awk určuje, kde každý sloupec začíná a končí, je ve výchozím nastavení mezerou.
Chcete-li vytisknout více než jeden sloupec, například první a čtvrtý sloupec, postupujte takto:
awk '{print $1, $4}' information.txt
Výstup:
fristName city
Thomas Rio
Omega Ontario
Wood Lisbon
Giorgos London
Timmy Berlin
$1 představuje první vstupní pole (první sloupec) a $4 představuje čtvrtý. Oddělujete je čárkou $1,$4 , takže výstup má mezeru a je čitelnější.
Chcete-li vytisknout poslední pole (poslední sloupec), můžete také použít $NF který představuje poslední pole v záznamu:
awk '{print $NF}' information.txt
Výstup:
ID
400
600
N/A
300
N/A
Jak vytisknout konkrétní řádky sloupce
Můžete také určit řádek, který chcete vytisknout z vámi zvoleného sloupce:
awk '{print $1}' information.txt | head -1
Výstup:
FirstName
Pojďme ten příkaz rozebrat. awk '{print $1}' information.txt vytiskne první sloupec. Potom je výstup tohoto příkazu (který jste viděli dříve) propojený pomocí symbolu potrubí | , na příkaz head, kde je jeho -1 argument vybere první řádek sloupce.
Pokud byste chtěli vytisknout dva řádky, udělali byste:
awk '{print $1}' information.txt | head -2
Výstup:
FirstName
Dionysia
Jak vytisknout čáry se specifickým vzorem v awk
Můžete vytisknout řádek, který začíná s konkrétním písmenem.
Například:
awk '/^O/' information.txt
Výstup:
Omega Night 45 Ontario 600
Tento příkaz vybere libovolný řádek s textem, který začíná s O .
Používáte symbol šipky nahoru (^ ), nejprve označuje začátek řádku a poté písmeno, kterým má řádek začínat.
Můžete také vytisknout řádek, který končí v určitém vzoru:
awk '/0$/' information.txt
Výstup:
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Giorgos Georgiou 35 London 300
Tím se vytisknou řádky, které končí 0 – $ symbol se používá za znakem k označení toho, jak řádek skončí.
Tento příkaz lze také změnit na:
awk '! /0$/' information.txt
! se používá jako NOT , takže v tomto případě vybere řádky, které NEKONČÍ na 0 .
fristName lastName age city ID
Wood Tinker 54 Lisbon N/A
Timmy Turner 32 Berlin N/A
Jak používat regulární výrazy v awk
Chcete-li vytisknout slova obsahující určitá písmena a vytisknout slova, která odpovídají zadanému vzoru, znovu použijte lomítka // , zobrazený dříve.
Pokud chcete hledat slova obsahující on , udělali byste:
awk ' /io/{print $0}' information.txt
Výstup:
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Giorgos Georgiou 35 London 300
To odpovídá všem záznamům, které obsahují io .
Řekněme, že máte další sloupec – department sloupec:
fristName lastName age city ID department
Thomas Shelby 30 Rio 400 IT
Omega Night 45 Ontario 600 Design
Wood Tinker 54 Lisbon N/A IT
Giorgos Georgiou 35 London 300 Data
Timmy Turner 32 Berlin N/A Engineering
Chcete-li najít všechny informace o lidech pracujících v IT , budete muset zadat řetězec, který hledáte, mezi lomítky, // :
awk '/IT/' information.txt
Výstup:
Thomas Shelby 30 Rio 400 IT
Wood Tinker 54 Lisbon N/A IT
Co kdybyste chtěli vidět pouze jména a příjmení lidí pracujících v IT? ?
Sloupec můžete určit takto:
awk '/IT/{print $1, $2}' information.txt
Výstup:
Thomas Shelby
Wood Tinker
Zobrazí se pouze první a druhý sloupec, kde je IT místo zobrazení všech polí.
Při hledání slov se specifickým vzorem může nastat situace, kdy budete muset použít znak escape, například:
awk '/N\/A$/' information.txt
Výstup:
Wood Tinker 54 Lisbon N/A
Timmy Turner 32 Berlin N/A
Chtěl jsem najít řádky, které končí vzorem N/A .
Takže při hledání mezi ' // ' jak bylo doposud ukázáno, musel jsem použít znak escape (\ ) mezi N/A , jinak bych dostal chybu.
Jak používat porovnávací operátory v awk
Pokud jste například chtěli najít všechny informace o zaměstnancích mladších 40 , použijete < porovnávací operátor takto:
awk '$3 < 40 { print $0 }' information.txt
Výstup:
Thomas Shelby 30 Rio 400
Giorgos Georgiou 35 London 300
Timmy Turner 32 Berlin N/A
Výstup zobrazuje pouze informace osob mladších 40 let.
Závěr
A tady to máte! Nyní znáte úplné základy, abyste mohli začít pracovat s awk a manipulovat s textovými daty.
Chcete-li se dozvědět více o Linuxu, freeCodeCamp má k dispozici širokou škálu výukových materiálů.
Zde je několik z nich, jak začít:
- Základy Linuxu – praktický workshop
- Linux pro etické hackery (Kali Linux Tutorial)
- Příručka Linux Command Handbook
Děkuji za přečtení a přeji příjemné učení 😊