Մշակել բազմաթիվ մուտքային ֆայլեր Awk-ի միջոցով


Ներածություն

Awk-ը տեքստի մշակման հզոր գործիք է, որը լայնորեն օգտագործվում է մշակողների, համակարգի ադմինիստրատորների և վերլուծաբանների կողմից՝ տարբեր ձևերով տվյալները շահարկելու համար: Այն բազմակողմանի գործիք է, որը կարող է մշակել տեքստային ֆայլեր, արդյունահանել տվյալներ և փոխակերպել դրանք տարբեր ձևաչափերի: Awk-ի հիմնական հատկանիշներից մեկը միաժամանակ բազմաթիվ մուտքային ֆայլեր մշակելու կարողությունն է, ինչը այն դարձնում է իդեալական խմբաքանակային մշակման առաջադրանքների համար: Այս հոդվածում մենք կուսումնասիրենք, թե ինչպես օգտագործել Awk-ը մի քանի մուտքային ֆայլեր մշակելու համար և կուսումնասիրենք մի քանի օրինակներ, թե ինչպես այն կարող է օգտագործվել գործնականում:

Awk-ի օգտագործումը բազմաթիվ մուտքային ֆայլերով

Awk-ը հրամանի տող գործիք է, որը նախատեսված է տեքստային ֆայլեր մշակելու համար: Լռելյայնորեն, Awk-ը կարդում է մուտքագրումը ստանդարտ մուտքագրից (stdin), որը կարող է վերահղվել ֆայլից կամ փոխանցվել մեկ այլ հրամանից: Այնուամենայնիվ, Awk-ը կարող է նաև միաժամանակ մշակել բազմաթիվ մուտքային ֆայլեր, որոնք կարող են օգտակար լինել խմբաքանակի մշակման առաջադրանքների համար:

Մի քանի մուտքային ֆայլեր մշակելիս Awk-ը յուրաքանչյուր ֆայլը վերաբերվում է որպես մուտքային տվյալների առանձին հոսք: Այն կարդում է յուրաքանչյուր ֆայլ հաջորդականությամբ՝ հերթով մշակելով յուրաքանչյուր ֆայլի մուտքային տվյալները: Սա նշանակում է, որ եթե դուք ունեք մի քանի ֆայլ, որոնք պարունակում են նույն տիպի տվյալներ, կարող եք օգտագործել Awk՝ դրանք բոլորը մեկ քայլով մշակելու համար, այլ ոչ թե յուրաքանչյուր ֆայլ առանձին մշակել:

Տվյալների ընթերցում բազմաթիվ մուտքային ֆայլերից

Բազմաթիվ մուտքային ֆայլերից տվյալները կարդալու համար դուք կարող եք նշել ֆայլերի անունները որպես արգումենտ Awk-ի համար, երբ այն գործարկեք: Օրինակ, ենթադրենք, որ դուք ունեք երկու ֆայլ՝ file1.txt և file2.txt, որոնք պարունակում են հետևյալ տվյալները.

file1.txt

apple
banana
orange

file2.txt

carrot
potato

Դուք կարող եք օգտագործել Awk-ը՝ երկու ֆայլերից էլ տվյալներ կարդալու և այն էկրանին տպելու համար՝ օգտագործելով հետևյալ հրամանը -

awk '{print}' file1.txt file2.txt

Այս հրամանը Awk-ին հրահանգում է կարդալ տվյալները և՛ file1.txt, և՛ file2.txt և տպել դրանք էկրանին: «{print}» հրամանն օգտագործվում է նշելու գործողությունը, որը Awk-ը պետք է կատարի մուտքային տվյալների յուրաքանչյուր տողի համար, այս դեպքում՝ այն էկրանին տպելու համար:

Տվյալների համադրում բազմաթիվ մուտքային ֆայլերից

Մի քանի մուտքային ֆայլերով Awk-ն օգտագործելու մեկ այլ եղանակ է ֆայլերի տվյալները միավորել մեկ ելքային հոսքի մեջ: Սա կարող է օգտակար լինել, եթե ունեք մի քանի ֆայլ, որոնք պարունակում են համապատասխան տվյալներ և ցանկանում եք դրանք միավորել մեկ տվյալների հավաքածուի մեջ: Դա անելու համար դուք կարող եք օգտագործել cat հրամանը ֆայլերը միացնելու համար, այնուհետև խողովակի ելքը Awk-ին:

Օրինակ, ենթադրենք, որ դուք ունեք երկու ֆայլ՝ file1.txt և file2.txt, որոնք պարունակում են հետևյալ տվյալները.

file1.txt

1,apple
2,banana
3,orange

file2.txt

1,carrot
2,potato

Դուք կարող եք օգտագործել հետևյալ հրամանը՝ երկու ֆայլերի տվյալները մեկ ելքային հոսքի մեջ միավորելու համար

cat file1.txt file2.txt | awk -F ',' '{print $1,$2}'

Այս հրամանն օգտագործում է cat հրամանը՝ file1.txt-ը և file2.txt-ը մեկ ելքային հոսքի մեջ միացնելու համար: ելքային հոսքն այնուհետև փոխանցվում է Awk-ին, որը հրահանգված է օգտագործել ստորակետ (',') որպես դաշտի բաժանարար՝ օգտագործելով -F տարբերակը: «{print $1,$2}» հրամանն օգտագործվում է մուտքային տվյալների յուրաքանչյուր տողից առաջին և երկրորդ դաշտերը տպելու համար՝ բաժանված բացատով:

Բազմաթիվ մուտքային ֆայլերից տվյալների մշակում −

Բազմաթիվ մուտքային ֆայլերից տվյալների մշակումը կարող է ներառել մի շարք գործողություններ, ինչպիսիք են զտումը, տեսակավորումը և համախմբումը: Awk-ն ապահովում է ներկառուցված գործառույթների լայն շրջանակ, որոնք կարող են օգտագործվել այս գործողությունները կատարելու համար՝ այն դարձնելով տվյալների մշակման հզոր գործիք:

Օրինակ, ենթադրենք, որ դուք ունեք երկու ֆայլ՝ file1.txt և file2.txt, որոնք պարունակում են հետևյալ տվյալները.

file1.txt

1,apple,0.5
2,banana,0.4
3,orange,0.3

file2.txt

1,carrot,0.2
2,potato,0.1

Դուք կարող եք օգտագործել Awk-ը երկու ֆայլերի տվյալները մշակելու և բոլոր մրգերի և բանջարեղենի ընդհանուր քաշը հաշվարկելու համար՝ օգտագործելով հետևյալ հրամանը.

awk -F ',' '{if ($2 == "apple" || $2 == "banana" || $2 == "orange") sum += $3; else sum += 0.0} END {print sum}' file1.txt file2.txt

Այս հրամանը օգտագործում է -F տարբերակը՝ ստորակետը (',') որպես դաշտի բաժանիչ նշելու համար: Այնուհետև այն օգտագործում է if դրույթ՝ file2.txt-ից ոչ մրգային տվյալները զտելու և երկու ֆայլերի բոլոր մրգերի ընդհանուր քաշը հաշվարկելու համար: sum փոփոխականը սկզբնավորվում է զրոյի և ավելանում է մուտքային տվյալների յուրաքանչյուր տողի համար, որը համապատասխանում է պտղի չափանիշներին: END բլոկը օգտագործվում է գումարի վերջնական արժեքը տպելու համար:

Awk-ի օգտագործման օրինակներ բազմաթիվ մուտքային ֆայլերով

Գրացուցակի բոլոր ֆայլերի ընդհանուր չափի հաշվարկ

Ենթադրենք, ցանկանում եք հաշվարկել գրացուցակի և դրա ենթագրքերում բոլոր ֆայլերի ընդհանուր չափը: Կարող եք օգտագործել հետևյալ հրամանը՝ գրացուցակում և դրա ենթագրքերում բոլոր ֆայլերի ցուցակ ստեղծելու համար, այնուհետև խողովակի ելքը դեպի Awk՝ ընդհանուր չափը հաշվարկելու համար.

find /path/to/directory -type f -print0 | xargs -0 ls -l | awk '{sum += $5} END {print sum}'

Այս հրամանն օգտագործում է find հրամանը՝ գրացուցակում և դրա ենթագրքերում բոլոր ֆայլերի ցուցակ ստեղծելու համար, և xargs հրամանը՝ ցուցակը ls -l-ին փոխանցելու համար՝ յուրաքանչյուր ֆայլի մանրամասն ցուցակ ստեղծելու համար: ls -l-ի ելքը այնուհետև ուղարկվում է Awk, որն օգտագործում է $5 դաշտ՝ բոլոր ֆայլերի ընդհանուր չափը բայթերով հաշվարկելու համար: END բլոկը օգտագործվում է գումարի վերջնական արժեքը տպելու համար:

Երկու CSV ֆայլի միավորում

Ենթադրենք, դուք ունեք երկու CSV ֆայլ, որոնք պարունակում են համապատասխան տվյալներ, և ցանկանում եք դրանք միավորել մեկ CSV ֆայլի մեջ: Դուք կարող եք օգտագործել հետևյալ հրամանը՝ ֆայլերը միաձուլելու և արդյունքը նոր ֆայլի մեջ դուրս բերելու համար.

awk 'FNR==1 && NR!=1 {next;}{print}' file1.csv file2.csv > merged.csv

Այս հրամանը օգտագործում է FNR և NR ներկառուցված փոփոխականներ՝ ապահովելու համար, որ վերնագրի տողը միայն մեկ անգամ ներառված է ելքային ֆայլում: առաջին ֆայլը սովորաբար մշակվում է, բայց երկրորդ ֆայլը բաց է թողնվում, եթե ընթացիկ տողի համարը (FNR) հավասար է 1-ի, իսկ ընդհանուր տողի համարը (NR) հավասար չէ 1-ի: արդյունքում ստացված արդյունքը վերահղվում է նոր ֆայլ՝ merged.csv:

Եզրակացություն

Awk-ը տեքստի մշակման հզոր գործիք է, որը կարող է օգտագործվել բազմաթիվ մուտքային ֆայլեր մշակելու համար: Այն ապահովում է ներկառուցված գործառույթների լայն շրջանակ, որոնք կարող են օգտագործվել տարբեր ձևերով տվյալների մանիպուլյացիայի համար՝ դարձնելով այն իդեալական խմբաքանակային մշակման առաջադրանքների համար: Միավորելով բազմաթիվ մուտքային ֆայլեր՝ Awk-ը կարող է օգնել ձեզ պարզեցնել ձեր տվյալների մշակման աշխատանքային հոսքերը և բարելավել ձեր տվյալների վերլուծության առաջադրանքների արդյունավետությունը: