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:
- Pole jedna, které je “TecMint.com ”, je přístupné pomocí
$1
. - K poli 2, které je “is ”, se přistupuje pomocí
$2
. - 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ářů.