Kaip naudoti Awk spausdinti laukus ir stulpelius faile


Šioje „Linux Awk“ komandų serijos dalyje apžvelgsime vieną iš svarbiausių Awk funkcijų, tai yra lauko redagavimas.

Verta žinoti, kad Awk automatiškai padalija jam pateiktas įvesties eilutes į laukus, o lauką galima apibrėžti kaip simbolių rinkinį, atskirtą nuo kitų laukų vidiniu laukų skyrikliu.

Jei esate susipažinę su „Unix“/„Linux“ arba programuojate „bash“ apvalkalą, turėtumėte žinoti, kas yra vidinio lauko skyriklio (IFS) kintamasis. Numatytasis Awk IFS yra skirtukas ir tarpas.

Taip laukų atskyrimo idėja veikia naudojant Awk: kai ji susiduria su įvesties eilute, pagal apibrėžtą IFS, pirmasis simbolių rinkinys yra laukas pirmasis, kuris pasiekiamas naudojant $1<., antrasis simbolių rinkinys yra antrasis laukas, pasiekiamas naudojant $2, trečiasis simbolių rinkinys yra trečias laukas, pasiekiamas naudojant $3 ir pan. iki paskutinio simbolių rinkinio.

Norėdami geriau suprasti šį Awk lauko redagavimą, pažvelkime į toliau pateiktus pavyzdžius:

1 pavyzdys: sukūriau tekstinį failą pavadinimu tecmintinfo.txt.

vi tecmintinfo.txt
cat tecmintinfo.txt

Tada iš komandinės eilutės bandau atspausdinti pirmą, antrą ir trečiąjį laukus iš failo tecmintinfo.txt > naudodami toliau pateiktą komandą:

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

TecMint.comisthe

Iš anksčiau pateiktos išvesties matote, kad simboliai iš pirmųjų trijų laukų spausdinami pagal IFS, apibrėžtą, kuri yra tarpas:

  1. Pirmasis laukas, kuris yra TecMint.com, pasiekiamas naudojant $1.
  2. Antrasis laukas, kuris yra „yra“, pasiekiamas naudojant $2.
  3. Trečiasis laukas, kuris yra „“, pasiekiamas naudojant $3.

Jei pastebėjote spausdintoje išvestyje, lauko reikšmės nėra atskirtos ir taip elgiasi spausdinimas pagal numatytuosius nustatymus.

Norėdami aiškiai matyti išvestį su tarpais tarp lauko reikšmių, turite pridėti operatorių (,) taip:

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

TecMint.com is the

Svarbu atkreipti dėmesį ir visada atsiminti, kad ($) naudojimas Awk skiriasi nuo jo naudojimo apvalkalo scenarijuose.

Pagal apvalkalo scenarijų ($) naudojamas norint pasiekti kintamųjų reikšmę, o Awk ($) naudojamas tik pasiekiant laukas, bet ne kintamųjų vertei pasiekti.

2 pavyzdys: pažvelkime į kitą pavyzdį naudodami failą, kuriame yra kelios eilutės, pavadintos mano_parduotuvės.sąrašas.

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		

Tarkime, kad norite spausdinti tik kiekvienos pirkinių sąrašo prekės Unit_Price, turėsite paleisti toliau pateiktą komandą:

$ 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 taip pat turi komandą printf, kuri padeda suformatuoti išvestį yra puikus būdas, nes matote, kad aukščiau pateikta išvestis nėra pakankamai aiški.

printf naudojimas norint formatuoti Item_Name ir Unit_Price išvestį:

$ 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

Santrauka

Lauko redagavimas yra labai svarbus, kai naudojate Awk tekstui ar eilutėms filtruoti, nes tai padeda gauti tam tikrus duomenis sąrašo stulpeliuose. Ir visada atminkite, kad operatoriaus ($) naudojimas Awk skiriasi nuo apvalkalo scenarijų.

Tikiuosi, kad straipsnis jums buvo naudingas, o jei turite papildomos informacijos ar turite klausimų, galite paskelbti komentarą komentarų skiltyje.