Ինչպես գրել AWK հրամաններ եւ սցենարներ

Հրամաններ, շարահյուսություն եւ օրինակներ

The awk հրահանգը հզոր մեթոդ է տեքստային ֆայլերի մշակման կամ վերլուծման համար, մասնավորապես տվյալների ֆայլերը, որոնք կազմակերպվում են տողերի (տողերի) եւ սյուների կողմից:

Պարզ awk հրամանները կարող են հրամանի տողից գործարկել: Ավելի բարդ խնդիրներ պետք է գրվեն որպես awk ծրագրեր (այսպես կոչված, awk սցենարներ) ֆայլ:

Awk հրամանի հիմնական ձեւաչափը կարծես նման է.

awk 'pattern {action}' ներդրման-ֆայլ> արտադրանքի-ֆայլը

Սա նշանակում է `մուտքագրել ֆայլի յուրաքանչյուր տողը. եթե գիծը պարունակում է օրինակ, գործողությունը կիրառվում է գծի մեջ եւ արդյունքում ստացվում է ելքային ֆայլը: Եթե ​​նմուշը բացակայում է, ակցիան կիրառվում է բոլոր տողում: Օրինակ:

awk '{print $ 5}' table1.txt> output1.txt

Այս հայտարարությունը տանում է յուրաքանչյուր տողի 5-րդ սյունակի տարրը եւ այն գրում է որպես «output.txt» արտադրանքի ֆայլի տող: '$ 4' փոփոխականը վերաբերում է երկրորդ սյունակին: Նմանապես դուք կարող եք մուտք գործել առաջին, երկրորդ եւ երրորդ սյունակ, $ 1, $ 2, $ 3 եւ այլն: Լռելյայն սյունակները ենթադրում են, որ դրանք առանձնացված են տարածքների կամ ներդիրների կողմից (այսպես կոչված `սպիտակ տարածություն): Այսպիսով, եթե «table1.txt» ներածման ֆայլը պարունակում է հետեւյալ տողերը,

1, Ջասթին Թիմբերլեյք, Title 545, Գին $ 7.30 2, Թեյլոր Սվիֆթ, Title 723, Գին $ 7.90 3, Միք Ջագեր, Title 610, Գինը $ 7.90 4, Lady Gaga, Title 118, Գին $ 7.30 5, Johnny Cash, վերնագիրը 482, Գին $ 6.50 6, Elvis Presley, Title 335, Գին $ 7.30 7, Ջոն Լենոն, Title 271, Գինը $ 7.90 8, Մայքլ Ջեքսոն, Title 373, Գին $ 5.50

Այնուհետեւ հրամանագիրը գրել է հետեւյալ տողերը «output1.txt» արտադրանքի ֆայլին:

545, 723, 610, 118, 482, 335, 271, 373,

Եթե ​​սյունակն անջատողը բացի այլ տարածքներից կամ ներդիրներից բացի այլ բան է, օրինակ `ստորակետ, դուք կարող եք նշել այն, որ awk- ի հայտարարության մեջ հետեւյալն է.

awk -F, '{print $ 3}' table1.txt> output1.txt

Սա յուրաքանչյուր գիծի 3-րդ սյունակից ընտրում է տարրը, եթե սյունները համարվում են առանձնացված ստորակետով: Հետեւաբար արտադրանքը, այս դեպքում, կլինի:

Վերնագիր 545 Title 723 Title 610 Title 118 Կազմ Title 482 Title 335 Title 271 Title 373

Կտրուկ փակագծերի ներսում գտնվող հայտարարությունների ցանկը («{», '}') կոչվում է բլոկ: Եթե ​​դուք պայմանական արտահայտություն եք դնում բլոկի դիմաց, բլոկի մեջ նշված հայտարարությունը կկատարվի միայն այն դեպքում, եթե պայմանը ճիշտ է:

awk '$ 7 == "\ $ 7.30" {print $ 3} "table1.txt

Այս դեպքում պայմանը $ 7 == "\ $ 7.30" է, ինչը նշանակում է, որ սյունակի 7 տարրը հավասար է $ 7.30-ի: Դոլարի նշանի դիմաց ճեղքվածքը օգտագործվում է համակարգը կանխելու համար $ 7-ը որպես փոփոխական եւ փոխարենը դոլարի նշան է վերցնում բառացիորեն:

Այսպիսով, այս awk հայտարարությունը տպագրում է տարրը 7-րդ սյունակում յուրաքանչյուր գծի 3-րդ սյունակում, որը ունի «$ 7.30»:

Դուք նաեւ կարող եք օգտագործել կանոնավոր արտահայտություններ, որպես պայման: Օրինակ:

awk '/ 30 / {print $ 3}' table1.txt

Երկու սլայաների ('/') միջեւ լարվածությունը հերթական արտահայտությունն է: Այս դեպքում դա պարզապես «30.» տող է: Սա նշանակում է, որ գծի պարունակությունը պարունակում է «30» տող, համակարգը տպում է այդ գծի 3-րդ սյունակում գտնվող տարրը: Վերոնշյալ օրինակում արտադրանքը կարող է լինել,

Timberlake, Gaga, Presley,

Եթե ​​սեղանի տարրերը awk թվեր են, կարող են հաշվարկներ կատարել դրանց վրա, ինչպես օրինակ այս օրինակում.

awk '{print ($ 2 * $ 3) + $ 7}' '

Բացի ընթացիկ շարքի տարրերի ($ 1, $ 2, եւ այլն) փոփոխականներից, կա $ 0 փոփոխական, որը վերաբերում է ամբողջական շարքին (գծին) եւ NF- ի փոփոխական դաշտերին, որոնք ունեն դաշտերի շարք:

Դուք կարող եք նաեւ սահմանել նոր փոփոխականներ, ինչպես այս օրինակում:

awk '{sum = 0; (col = 1; col <= NF, col ++) գումարը + = $ col; տպագիր գումարը; } '

Սա հաշվարկում եւ տպում է յուրաքանչյուր շարքի բոլոր տարրերի գումարը:

Awk- ի հայտարարությունները հաճախ համակցվում են հրամանների հետ :