15 հետաքրքիր awk հրամաններ
Այս հոդվածը ձեզ կներկայացնի մի քանի հետաքրքիր awk հրամաններ և երբ դրանք օգտագործել: Կարդացեք՝ պարզելու համար:
Ներածություն awk
AWK-ն հայտնի լեզու է UNIX-ում և Linux-ում: Այն ստացել է իր անունը իր հեղինակներից՝ Ալֆրեդ Ահոյից, Փիթեր Վայնբերգերից և Բրայան Քերնիգանից։ awk հրամանը թույլ է տալիս մուտք գործել AWK ծրագրավորման լեզու, որը նախատեսված է տեքստային հոսքերի մեջ տվյալները մշակելու համար:
Հանրաճանաչորեն օգտագործվող օրինաչափությունների սկանավորման և բարդ գործողությունների պարզեցման համար՝ awk-ն օգնում է ձեզ գրել արդյունավետ հայտարարություններ՝ ֆայլում տեքստային նախշերը սահմանելու համար: Այնուհետև awk հրամանը մշակում է այս հայտարարությունները՝ կարդալով մեկ տող և կատարում է գործողություն՝ հիմնվելով տրված պայմանի վրա:
Պարզ ասած, awk-ը գտնում և փոխարինում է տեքստը և օգնում է տեսակավորել, վավերացնել կամ ինդեքսավորել տվյալ տվյալները:
AWK-ի առանձնահատկությունները
awk-ն ունի բազմաթիվ եզակի առանձնահատկություններ.
-
Awk-ում կոմպիլյացիան անհրաժեշտ չէ
Հաճախ օգտագործվում է տվյալների արդյունահանման համար
Սովորաբար օգտագործվում է տեքստի մանիպուլյացիա կատարելու համար
Անհրաժեշտության դեպքում օգնում է արդյունքներ ստեղծել:
Այժմ եկեք ուսումնասիրենք awk հրամանների ուժը:
15 հետաքրքիր awk հրամաններ
Ահա մի քանի հետաքրքիր awk հրամանների կազմված ցուցակ.
Պատահական թվերի տպում հավաքածուում – Ենթադրենք, որ ցանկանում եք տպել մի քանի պատահական թվեր ընտրված լողավազանից: Դուք կարող եք նշել պատահական թվերի քանակը այս լողավազանից և խնդրել awk-ին տպել սա: Ահա մի օրինակ. եկեք տպենք 10 թվեր 0-ից մինչև 1000: Այսպիսով, awk հրամանը կլինի հետևյալը.
awk 'BEGIN { for (i = 1; i <= 10; i++)
print int(1001 * rand()) }'
Որոնել foo-ի կամ bar-ի համար – Իսկ եթե ցանկանում եք գրել տող, որտեղ ցանկանում եք կատարել foo-ի կամ bar-ի պարզ որոնում: Ահա մի հրաման, որը թույլ կտա ձեզ դա անել.
if (/foo/ || /bar/)
print "Found!"
Դաշտի վերադասավորում – Եթե ցանկանում եք որոշակի դաշտ տպել որոշակի հերթականությամբ, awk-ը կարող է դա անել ձեզ համար: Ենթադրենք, որ ցանկանում եք տպել որոշակի հավաքածուի առաջին 5 դաշտերը մեկ դաշտում յուրաքանչյուր տողում, կարող եք օգտագործել հետևյալ հրամանը.
awk ’{ i = 1
while (i <= 3) {
print $i
i++
}
}’ inputfile
Գծի բաժանում – Ֆայլերի ցանկացած հավաքածուում awk-ը կարող է օգնել տողը բաժանել դաշտերի, որտեղ x-ը դաշտի անունն է.
$ awk '{print $x,$x}'xyz.txt
-
Միաժամանակ մի քանի հրամանների գործարկում – Մի քանի հրամաններ միանգամից գործարկելու համար կարող եք օգտագործել կետ-ստորակետ՝ երկու հրամանները նշելու համար.
$ echo "Good morning! Jack" | awk '{$2="Jill"; print $0}'
awk script-ի կատարում – Եթե ցանկանում եք կատարել awk script որոշակի ֆայլից, կարող եք ստեղծել ֆայլի sum_column և տեղադրել ստորև նշված սցենարը այդ ֆայլում.
#!/usr/bin/awk -f
BEGIN {sum=0}
{sum=sum+$x}
END {print sum}Վերոնշյալ սցենարում x-ը հավասար է այն սյունին, որը դուք պետք է մուտքագրեք ֆայլում: Այս առաջադրանքի հաջող ավարտից հետո դուք կարող եք օգտագործել հետևյալ հրամանը՝ մուտքագրված ֆայլում x սյունակի գումարը ցուցադրելու համար.
awk -f sum_column input_file.
Օգտագործելով –f – Կոդավորման ժամանակ հաճախ կարող է անիրագործելի թվալ տերմինալին դիմելը: awk-ն օգտագործում է –f ֆայլից որոնում կատարելու համար.
awk -f script.awk inputfile
Մաթեմատիկական գործառույթների կատարում – Դուք կարող եք նաև օգտագործել awk պարզ մաթեմատիկական ֆունկցիաների համար.
awk ’{ sum = $2 + $3 + $4 ; avg = sum / 3
> print $1, avg }’ grades
Hello World in awk – Դուք կարող եք տպել պարզ Hello World awk-ում՝ օգտագործելով հետևյալ հրամանը.
awk "BEGIN { print "Hello World!!" }"Կարող եք նաև ստեղծել «Բարև աշխարհ» ծրագիր: Հետևյալ կոդը ոչ միայն կտպագրի ամենուր տարածված բարևի հաղորդագրությունը, այլև կստեղծի վերնագրի տեղեկատվություն.
$ awk 'BEGIN { print "Hello World!" }'
Բայթերի ընդհանուր քանակի տպում – Դուք կարող եք պարզել ֆայլերի կողմից օգտագործվող ընդհանուր բայթերը՝ օգտագործելով հետևյալ հրամանը.
ls -l . | awk '{ x += $5 } ; END \
{ print "total bytes: " x }'
total bytes: 7449362
Apache-ի մատյանների անանունացում – Դուք կարող եք օգտագործել հետևյալ կոդը՝ Apache-ի մատյանն անանուն դարձնելու համար.
cat apache-anon-noadmin.log | \
awk 'function ri(n) \
{ return int(n*rand()); } \
BEGIN { srand(); } { if (! \
($5 in jack)) { \
jack[$5] = sprintf("%d.%d.%d.%d", \
ri(255), ri(255)\
, ri(255), ri(255)); } \
$5 = jack[$5]; print __g5_token5b610ba53dbe4 }'
Գործողություն տողերում – Եթե ունեք հասցե, որը ցանկանում եք տեսակավորել տողերով, կարող եք դա անել՝ օգտագործելով հետևյալ հրամանը.
BEGIN { RS = "" ; FS = "\n" }
{
print "Name is:", $1
print "Address is:", $2
print "City and State are:", $3
print ""
}
-
Օգտագործելով while հանգույցը – while հանգույցը շարունակում է կատարել իրեն տրված գործողությունը կրկնվող գործընթացով, մինչև պայմանը ճշմարիտ լինի: Օրինակ, 1-ից 100 համարները տպելու համար կարող եք օգտագործել հետևյալ կոդը.
awk 'BEGIN {i = 1; while (i < 100) { print i; ++i } }'
Օգտագործելով do-while հանգույցը – Այս օղակում պայմանը կատարվում է օղակի վերջում, նույնիսկ եթե հայտարարությունը կեղծ է: Օրինակ, 1-ից 100 թվերը տպելու համար do-while հանգույցի միջոցով կարող եք օգտագործել հետևյալ կոդը.
awk 'BEGIN {i = 1; do { print i; ++i } while (i < 100) }'
Օգտագործելով BEGIN և END – BEGIN հիմնաբառն օգտագործվում է ձեր գրառումը մշակելու համար վերնագիր ստեղծելու համար:
$ awk 'BEGIN {print "XXX"}Նույն կերպ տվյալների մշակումից հետո օգտագործվում է END բանալի բառը.
END {print "File footer"}'