Spracovanie viacerých vstupných súborov pomocou Awk


Úvod

Awk je výkonný nástroj na spracovanie textu, ktorý vo veľkej miere používajú vývojári, správcovia systému a analytici na manipuláciu s údajmi rôznymi spôsobmi. Je to všestranný nástroj, ktorý dokáže spracovať textové súbory, extrahovať údaje a transformovať ich do rôznych formátov. Jednou z kľúčových vlastností Awk je jeho schopnosť spracovávať viacero vstupných súborov súčasne, vďaka čomu je ideálny pre úlohy dávkového spracovania. V tomto článku preskúmame, ako použiť Awk na spracovanie viacerých vstupných súborov a preskúmame niekoľko príkladov, ako sa dá použiť v praxi.

Používanie Awk s viacerými vstupnými súbormi

Awk je nástroj príkazového riadka, ktorý je určený na spracovanie textových súborov. V predvolenom nastavení Awk číta vstup zo štandardného vstupu (stdin), ktorý môže byť presmerovaný zo súboru alebo presmerovaný z iného príkazu. Awk však dokáže spracovať aj viacero vstupných súborov súčasne, čo môže byť užitočné pri úlohách dávkového spracovania.

Pri spracovaní viacerých vstupných súborov Awk zaobchádza s každým súborom ako so samostatným prúdom vstupných údajov. Číta každý súbor v poradí, pričom postupne spracováva vstupné údaje z každého súboru. To znamená, že ak máte viacero súborov, ktoré obsahujú rovnaký typ údajov, môžete pomocou Awk spracovať všetky naraz, namiesto toho, aby ste museli spracovávať každý súbor samostatne.

Čítanie údajov z viacerých vstupných súborov

Ak chcete čítať údaje z viacerých vstupných súborov, môžete pri spustení Awk zadať názvy súborov ako argumenty. Predpokladajme napríklad, že máte dva súbory, súbor1.txt a súbor2.txt, ktoré obsahujú nasledujúce údaje −

súbor1.txt

apple
banana
orange

súbor2.txt

carrot
potato

Awk môžete použiť na čítanie údajov z oboch súborov a ich tlač na obrazovku pomocou nasledujúceho príkazu −

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

Tento príkaz povie Awk, aby načítal údaje zo súborov file1.txt aj file2.txt a vytlačil ich na obrazovku. Príkaz '{print}' sa používa na špecifikáciu akcie, ktorú má Awk vykonať pre každý riadok vstupných údajov, v tomto prípade ich vytlačiť na obrazovku.

Kombinovanie údajov z viacerých vstupných súborov

Ďalším spôsobom, ako použiť Awk s viacerými vstupnými súbormi, je spojiť údaje zo súborov do jedného výstupného toku. To môže byť užitočné, ak máte viacero súborov, ktoré obsahujú súvisiace údaje a chcete ich skombinovať do jednej množiny údajov. Ak to chcete urobiť, môžete použiť príkaz cat na zreťazenie súborov a potom výstup dát do Awk.

Predpokladajme napríklad, že máte dva súbory, súbor1.txt a súbor2.txt, ktoré obsahujú nasledujúce údaje −

súbor1.txt

1,apple
2,banana
3,orange

súbor2.txt

1,carrot
2,potato

Nasledujúci príkaz môžete použiť na spojenie údajov z oboch súborov do jedného výstupného toku −

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

Tento príkaz používa príkaz cat na zreťazenie súborov1.txt a súbor2.txt do jedného výstupného toku. výstupný tok je potom presmerovaný do Awk, ktorý dostane pokyn použiť čiarku (',') ako oddeľovač polí pomocou voľby -F. Príkaz '{print $1,$2}' sa používa na tlač prvého a druhého poľa z každého riadku vstupných údajov oddelených medzerou.

Spracovanie údajov z viacerých vstupných súborov −

Spracovanie údajov z viacerých vstupných súborov môže zahŕňať rôzne operácie, ako je filtrovanie, triedenie a agregácia. Awk poskytuje širokú škálu vstavaných funkcií, ktoré je možné použiť na vykonávanie týchto operácií, čo z neho robí výkonný nástroj na spracovanie údajov.

Predpokladajme napríklad, že máte dva súbory, súbor1.txt a súbor2.txt, ktoré obsahujú nasledujúce údaje −

file1.txt

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

súbor2.txt

1,carrot,0.2
2,potato,0.1

Pomocou Awk môžete spracovať údaje z oboch súborov a vypočítať celkovú hmotnosť všetkého ovocia a zeleniny pomocou nasledujúceho príkazu −

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

Tento príkaz používa voľbu -F na zadanie čiarky (',') ako oddeľovača polí. Potom použije príkaz if na odfiltrovanie neovocných údajov zo súboru 2.txt a vypočíta celkovú hmotnosť všetkých druhov ovocia v oboch súboroch. premenná suma sa inicializuje na nulu a zvýši sa pre každý riadok vstupných údajov, ktoré zodpovedajú kritériám pre ovocie. Blok END slúži na vytlačenie konečnej hodnoty súčtu.

Príklady použitia Awk s viacerými vstupnými súbormi

Výpočet celkovej veľkosti všetkých súborov v adresári

Predpokladajme, že chcete vypočítať celkovú veľkosť všetkých súborov v adresári a jeho podadresároch. Pomocou nasledujúceho príkazu môžete vygenerovať zoznam všetkých súborov v adresári a jeho podadresároch a potom preniesť výstup do Awk na výpočet celkovej veľkosti −

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

Tento príkaz používa príkaz find na vygenerovanie zoznamu všetkých súborov v adresári a jeho podadresároch a príkaz xargs na odovzdanie zoznamu do ls -l na vygenerovanie podrobného zoznamu každého súboru. výstup ls -l je potom presmerovaný do Awk, ktorý používa pole $5 na výpočet celkovej veľkosti všetkých súborov v bajtoch. Blok END slúži na vytlačenie konečnej hodnoty súčtu.

Zlúčenie dvoch súborov CSV

Predpokladajme, že máte dva súbory CSV, ktoré obsahujú súvisiace údaje, a chcete ich zlúčiť do jedného súboru CSV. Na zlúčenie súborov a výstup výsledku do nového súboru môžete použiť nasledujúci príkaz:

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

Tento príkaz používa vstavané premenné FNR a NR, aby sa zabezpečilo, že riadok hlavičky bude vo výstupnom súbore zahrnutý iba raz. prvý súbor sa spracuje normálne, ale druhý súbor sa preskočí, ak sa aktuálne číslo riadku (FNR) rovná 1 a celkové číslo riadku (NR) sa nerovná 1. Výsledný výstup je potom presmerovaný do nového súboru merged.csv.

Záver

Awk je výkonný nástroj na spracovanie textu, ktorý možno použiť na spracovanie viacerých vstupných súborov. Poskytuje širokú škálu vstavaných funkcií, ktoré možno použiť na manipuláciu s údajmi rôznymi spôsobmi, vďaka čomu je ideálny pre úlohy dávkového spracovania. Kombináciou viacerých vstupných súborov vám Awk môže pomôcť zefektívniť vaše pracovné postupy spracovania údajov a zlepšiť efektivitu vašich úloh analýzy údajov.