GNU/Linux >> Znalost Linux >  >> Linux

Začínáme s awk, výkonným nástrojem pro analýzu textu

Awk je výkonný nástroj pro analýzu textu pro Unix a systémy podobné Unixu, ale protože má naprogramované funkce, které můžete použít k provádění běžných úloh analýzy, považuje se také za programovací jazyk. . Pravděpodobně nebudete vyvíjet svou další GUI aplikaci s awk a pravděpodobně nenahradí váš výchozí skriptovací jazyk, ale je to mocný nástroj pro specifické úlohy.

Jaké mohou být tyto úkoly, je překvapivě různorodé. Nejlepší způsob, jak zjistit, který z vašich problémů by mohl nejlépe vyřešit awk, je naučit se awk; budete překvapeni, jak vám awk může pomoci udělat více, ale s mnohem menším úsilím.

Základní syntaxe Awk je:

awk [options] 'pattern {action}' file 

Chcete-li začít, vytvořte tento ukázkový soubor a uložte jej jako colors.txt

název       barva  množství
jablko      červená    4
banánová     žlutá 6
jahodová červená    3
hroznová      fialová 10
jablko      zelená  8 2 p />kiwi       hnědá  4
bramborová     hnědá  9
ananas  žlutá 5

Tato data jsou oddělena do sloupců jednou nebo více mezerami. Je běžné, že data, která analyzujete, jsou nějakým způsobem organizována. Nemusí to být vždy sloupce oddělené mezerami nebo dokonce čárkou nebo středníkem, ale zejména v souborech protokolu nebo výpisech dat existuje obecně předvídatelný vzor. Můžete použít vzory dat, které vám pomohou extrahovat a zpracovat data, na která se chcete zaměřit.

Tisk sloupce

V awk je tisk funkce zobrazí vše, co určíte. Existuje mnoho předdefinovaných proměnných, které můžete použít, ale některé z nejběžnějších jsou celá čísla označující sloupce v textovém souboru. Vyzkoušejte to:

$ awk '{print $2;}' colours.txt
barva
červená
žlutá
červená
fialová
zelená
fialová
hnědá
hnědá
žlutá

V tomto případě awk zobrazí druhý sloupec označený $2 . To je poměrně intuitivní, takže pravděpodobně uhodnete, že tiskněte $1 zobrazí první sloupec a vytiskne 3 $ zobrazí třetí a tak dále.

Chcete-li zobrazit vše sloupců, použijte 0 $ .

Číslo za znakem dolaru ($ ) je výraz , takže 2 $ a $(1+1) znamenají totéž.

Podmíněný výběr sloupců

Vzorový soubor, který používáte, je velmi strukturovaný. Má řádek, který slouží jako záhlaví, a sloupce spolu přímo souvisí. Definováním podmíněného požadavky, můžete určit, co chcete, aby awk při prohlížení těchto dat vrátil. Chcete-li například zobrazit položky ve sloupci 2, které odpovídají „žluté“, a vytisknout obsah sloupce 1:

awk '$2=="žlutá"{print $1}' colours.txt
banán
ananas

Regulární výrazy fungují také. Tato podmínka vypadá na 2 $ pro přibližné shody na písmeno p následuje libovolný počet (jeden nebo více) znaků, za nimiž následuje písmeno p :

$ awk '$2 ~ /p.+p/ {tisk $0}' colours.txt
hroznová   fialová  10
švestka    fialová  2

Čísla jsou přirozeně interpretována pomocí awk. Chcete-li například vytisknout libovolný řádek se třetím sloupcem obsahujícím celé číslo větší než 5:

awk '$3>5 {print $1, $2}' colours.txt
název    barva
banánová  žlutá
hroznová   fialová
jablko   zelená
bramborová  hnědá

Oddělovač polí

Ve výchozím nastavení používá awk jako oddělovač polí mezery. Ne všechny textové soubory však používají k definování polí mezery. Vytvořte například soubor s názvem colors.csv s tímto obsahem:

název,barva,množství
jablko,červená,4
banán,žlutá,6
jahoda,červená,3
hroznová,fialová,10
jablko, zelená,8
švestka,fialová,2
kiwi,hnědá,4
bramborová,hnědá,9
ananas,žlutá,5

Awk může s daty zacházet přesně stejným způsobem, pokud určíte, který znak má použít jako oddělovač polí ve vašem příkazu. Použijte --field-separator (nebo jen -F zkráceně) možnost definovat oddělovač:

$ awk -F"," '$2=="žlutá" {print $1}' soubor1.csv
banán
ananas

Ukládání výstupu

Pomocí přesměrování výstupu můžete výsledky zapsat do souboru. Například:

$ awk -F, '$3>5 {print $1, $2} colours.csv > output.txt 

Tím se vytvoří soubor s obsahem vašeho dotazu awk.

Další zdroje pro Linux

  • Cheat pro příkazy Linuxu
  • Cheat sheet pro pokročilé příkazy systému Linux
  • Bezplatný online kurz:Technický přehled RHEL
  • Síťový cheat pro Linux
  • Cheat sheet SELinux
  • Cheat pro běžné příkazy pro Linux
  • Co jsou kontejnery systému Linux?
  • Naše nejnovější články o Linuxu

Soubor můžete také rozdělit do více souborů seskupených podle dat sloupců. Pokud například chcete rozdělit colours.txt do více souborů podle toho, jaká barva se objeví v každém řádku, můžete způsobit přesměrování awk na dotaz zahrnutím přesměrování do vašeho příkazu awk:

$ awk '{print > $2".txt"}' colours.txt 

Tím se vytvoří soubory s názvem yellow.txt , red.txt , a tak dále.

V dalším článku se dozvíte více o polích, záznamech a některých výkonných awk proměnných.

Tento článek je převzat z epizody Hacker Public Radio, komunitního technologického podcastu.


Linux
  1. Začínáme se Zsh

  2. Začínáme s ls

  3. Začínáme se Sambou pro interoperabilitu

  1. Začínáme se socatem, víceúčelovým přenosovým nástrojem pro Linux

  2. Začínáme s PostgreSQL na Linuxu

  3. Začínáme s SSH v Linuxu

  1. Začínáme s GnuCash

  2. Začínáme s Etcher.io

  3. Jak na to:Začínáme s Ansible