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í 😊