Hvernig á að nota Awk til að prenta reiti og dálka í skrá


Í þessum hluta af Linux Awk skipana röðinni okkar munum við skoða einn mikilvægasta eiginleika Awk, sem er sviðsbreyting.

Það er gott að vita að Awk skiptir innsláttarlínum sjálfkrafa í reiti og hægt er að skilgreina reit sem sett af stöfum sem eru aðskilin frá öðrum sviðum með innri reitskil.

Ef þú þekkir Unix/Linux eða stundar bash skel forritun, þá ættir þú að vita hvað innri sviðsskil (IFS) breyta er. Sjálfgefið IFS í Awk eru tab og space.

Svona virkar hugmyndin um reitaðskilnað í Awk: þegar hún rekst á innsláttarlínu, samkvæmt skilgreiningu IFS, er fyrsta settið af stöfum reit eitt, sem er opnað með $1, annað sett af stöfum er reit tvö, sem er opnuð með $2, þriðja sett af stöfum er reit þrjú, sem er opnuð með $3 og svo framvegis þar til síðasta settið af stöfum.

Til að skilja þessa Awk-reitbreytingu betur skulum við kíkja á dæmin hér að neðan:

Dæmi 1: Ég hef búið til textaskrá sem heitir tecmintinfo.txt.

# vi tecmintinfo.txt
# cat tecmintinfo.txt

Síðan á skipanalínunni reyni ég að prenta fyrsta, annan og þriðja reitinn úr skránni tecmintinfo.txt með því að nota skipunina hér að neðan:

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

TecMint.comisthe

Af úttakinu hér að ofan geturðu séð að stafirnir úr fyrstu þremur reitunum eru prentaðir út frá IFS skilgreindu sem er bil:

  1. Reit eitt sem er \TecMint.com“ er opnað með $1.
  2. Reit tvö sem er \er\ er opnuð með $2.
  3. Reit þrjú sem er \the\ er opnuð með $3.

Ef þú hefur tekið eftir því í prentuðu úttakinu eru svæðisgildin ekki aðskilin og þetta er hvernig prentun hegðar sér sjálfgefið.

Til að sjá úttakið skýrt með bili á milli svæðisgildanna þarftu að bæta við (,) stjórnanda sem hér segir:

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

TecMint.com is the

Eitt mikilvægt að hafa í huga og alltaf muna er að notkun ($) í Awk er frábrugðin notkun þess í skeljaforskriftum.

Undir skel skriftu er ($) notað til að fá aðgang að gildi breyta á meðan í Awk ($) er það aðeins notað þegar aðgangur er að innihaldi svæðis en ekki til að fá aðgang að gildi breyta.

Dæmi 2: Við skulum skoða eitt annað dæmi með því að nota skrá sem inniheldur margar línur sem kallast 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		

Segðu að þú vildir aðeins prenta Einingarverð af hverjum hlut á innkaupalistanum, þú þarft að keyra skipunina hér að neðan:

$ 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 er líka með printf skipun sem hjálpar þér að forsníða úttakið þitt og er góð leið þar sem þú sérð að úttakið hér að ofan er ekki nógu skýrt.

Notkun printf til að forsníða úttak á Item_Name og 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

Samantekt

Sviðsbreyting er mjög mikilvæg þegar Awk er notað til að sía texta eða strengi, það hjálpar þér að fá ákveðin gögn í dálka á lista. Og mundu alltaf að notkun ($) stjórnanda í Awk er önnur en í skeljaforskriftum.

Ég vona að greinin hafi verið þér gagnleg og fyrir allar frekari upplýsingar sem krafist er eða spurningar geturðu skrifað athugasemd í athugasemdareitnum.