Kuidas kasutada Awki failide väljade ja veergude printimiseks
Meie Linux Awk käsusarja selles osas vaatleme Awki ühte olulisemat funktsiooni, milleks on välitöötlus.
On hea teada, et Awk jagab talle sisestatud read automaatselt väljadeks ja välja saab määratleda märkide kogumina, mis eraldatakse teistest väljadest sisemise väljaeraldaja abil.
Kui olete Unixi/Linuxiga tuttav või teete bashi kesta programmeerimist, peaksite teadma, mis on sisevälja eraldaja (IFS) muutuja. Vaikimisi IFS Awkis on tab ja tühik.
Nii töötab välja eraldamise idee Awkis: kui see kohtub sisendjoonega, on vastavalt IFS-ile määratletud esimene tähemärkide komplekt väli üks, millele pääseb juurde $1 abil, teine märkide komplekt on väli kaks, mis juurde pääseb $2 abil, kolmas tähemärkide komplekt on väli 3, millele pääseb ligi $3 ja nii edasi kuni viimase märgimärgini.
Selle Awki välja muutmise paremaks mõistmiseks vaadake allolevaid näiteid:
Näide 1: Olen loonud tekstifaili nimega tecmintinfo.txt.
# vi tecmintinfo.txt # cat tecmintinfo.txt
Seejärel proovin käsurealt printida failist tecmintinfo.txt esimese, teise ja kolmanda välja, kasutades järgmist käsku:
$ awk '//{print $1 $2 $3 }' tecmintinfo.txt TecMint.comisthe
Ülaltoodud väljundist näete, et esimese kolme välja märgid trükitakse vastavalt IFS-ile, mis on tühik:
- Esimesele väljale, mis on\"TecMint.com", pääseb juurde, kasutades
$1
. - Väljale 2, mis on\"on", pääseb juurde, kasutades koodi
$2
. - Kolmandale väljale, mis on\"the", pääseb juurde, kasutades koodi
$3
.
Kui olete seda väljatrükis märganud, ei eraldata välja väärtusi ja prindikäitumine on selline.
Väljundi selgeks kuvamiseks tühiku väärtusega väljade väärtuste vahel peate lisama operaatori (,)
järgmiselt:
$ awk '//{print $1, $2, $3; }' tecmintinfo.txt TecMint.com is the
Üks oluline asi, mida meeles pidada ja alati meeles pidada, on see, et ($)
kasutamine Awkis erineb selle kasutamisest shelliskriptides.
Shelli skripti all kasutatakse ($)
muutujate väärtusele ligipääsuks, samas kui Awk ($)
kasutatakse seda ainult välja sisule, kuid mitte muutujate väärtus.
Näide 2: Vaatame ühte teist näidet, kasutades faili, mis sisaldab mitut rida nimega 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
Oletame, et soovite printida ainult iga ostunimekirja üksuse Unit_Price
, peate käivitama alloleva käsu:
$ 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
Awkil on ka käsk printf
, mis aitab teil väljundit vormindada, see on kena viis, kuna näete, et ülaltoodud väljund pole piisavalt selge.
Üksuse printf
:
$ 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
Kokkuvõte
Välja redigeerimine on Awki kasutamisel teksti või stringide filtreerimiseks väga oluline, see aitab teil konkreetseid andmeid loendi veergudesse saada. Ja pidage alati meeles, et operaatori ($)
kasutamine Awkis erineb shelliskriptide kasutamisest.
Loodan, et artikkel oli teile abiks ja kui vajate lisateavet või küsimusi, võite postitada kommentaari jaotises kommentaari.