Vyhledávání na webu

Jak používat Awk k tisku polí a sloupců v souboru


V této části naší série příkazů Linux Awk se podíváme na jednu z nejdůležitějších funkcí Awk, kterou je editace polí.

Je dobré vědět, že Awk automaticky rozděluje jemu poskytnuté vstupní řádky do polí a pole lze definovat jako sadu znaků, které jsou od ostatních polí odděleny vnitřním oddělovačem polí.

Pokud jste obeznámeni s Unixem/Linuxem nebo se zabýváte programováním shellu bash, měli byste vědět, co je proměnná interního oddělovače polí (IFS). Výchozí IFS v Awk jsou tabulátor a mezera.

Takto funguje myšlenka oddělení polí v Awk: když narazí na vstupní řádek, podle definovaného IFS je první sadou znaků pole jedna, ke kterému se přistupuje pomocí $1<, druhá sada znaků je pole 2, ke kterému se přistupuje pomocí $2, třetí sada znaků je pole 3, ke kterému se přistupuje pomocí $3 a tak dále až do poslední sady znaků.

Abychom lépe porozuměli této úpravě pole Awk, podívejme se na níže uvedené příklady:

Příklad 1: Vytvořil jsem textový soubor s názvem tecmintinfo.txt.

vi tecmintinfo.txt
cat tecmintinfo.txt

Poté se z příkazového řádku pokusím vytisknout pole první, druhé a třetí ze souboru tecmintinfo.txt pomocí příkazu níže:

$ awk '//{print $1 $2 $3 }' tecmintinfo.txt

TecMint.comisthe

Z výše uvedeného výstupu můžete vidět, že znaky z prvních tří polí jsou vytištěny na základě definovaného IFS, což je mezera:

  1. Pole jedna, které je “TecMint.com ”, je přístupné pomocí $1.
  2. K poli 2, které je “is ”, se přistupuje pomocí $2.
  3. Pole tři, které je “the ”, je přístupné pomocí $3.

Pokud jste si v tištěném výstupu všimli, hodnoty polí nejsou odděleny a takto se tisk chová standardně.

Chcete-li jasně zobrazit výstup s mezerou mezi hodnotami polí, musíte přidat operátor (,) následovně:

$ awk '//{print $1, $2, $3; }' tecmintinfo.txt

TecMint.com is the

Jedna důležitá věc, kterou je třeba poznamenat a vždy mít na paměti, je, že použití ($) v Awk se liší od použití ve skriptování shellu.

Skriptování v prostředí ($) se používá k přístupu k hodnotě proměnných, zatímco v Awk ($) se používá pouze při přístupu k obsahu pole, ale ne pro přístup k hodnotě proměnných.

Příklad 2: Podívejme se na další příklad pomocí souboru, který obsahuje více řádků s názvem my_shoping.list.

No	Item_Name		Unit_Price	Quantity	Price
1	Mouse			#20,000		   1		#20,000
2 	Monitor			#500,000	   1		#500,000
3	RAM_Chips		#150,000	   2		#300,000
4	Ethernet_Cables	        #30,000		   4		#120,000		

Řekněme, že chcete vytisknout pouze Unit_Price každé položky na nákupním seznamu, budete muset spustit následující příkaz:

$ awk '//{print $2, $3 }' my_shopping.txt 

Item_Name Unit_Price
Mouse #20,000
Monitor #500,000
RAM_Chips #150,000
Ethernet_Cables #30,000

Awk má také příkaz printf, který vám pomůže formátovat výstup, což je pěkný způsob, jak vidíte, že výše uvedený výstup není dostatečně jasný.

Použití printf k formátování výstupu Item_Name a Unit_Price:

$ awk '//{printf "%-10s %s\n",$2, $3 }' my_shopping.txt 

Item_Name  Unit_Price
Mouse      #20,000
Monitor    #500,000
RAM_Chips  #150,000
Ethernet_Cables #30,000

souhrn

Úprava pole je velmi důležitá při použití Awk k filtrování textu nebo řetězců, pomáhá vám získat konkrétní data ve sloupcích v seznamu. A vždy pamatujte, že použití operátoru ($) v Awk se liší od použití ve skriptování shellu.

Doufám, že pro vás byl článek užitečný a pro jakékoli další požadované informace nebo dotazy můžete napsat komentář v sekci komentářů.