it-swarm-eu.dev

Existuje ještě nějaký důvod se naučit AWK?

Neustále se učím nové nástroje, dokonce i ty staromódní, protože pro tento problém rád používám správné řešení.

Zajímalo by mě, jestli je ještě nějaký důvod se naučit některé z nich. Například awk je pro mě zajímavé, ale pro jednoduché zpracování textu mohu použít grep, cut, sed, atd., zatímco pro složité, půjdu pro Python.

Teď nemyslím, že to není mocný a šikovný nástroj. Ale protože to trvá čas a energii, aby se naučil nový nástroj, stojí za to ?

93
e-satis

Myslím, že záleží na prostředí, ve kterém se ocitnete. Pokud jste osoba * nix, pak je znalost awk dobrá věc. Jediné další skriptovací prostředí, které lze nalézt na prakticky každé * nix je sh. Zatímco grep, sed, atd. Může jistě nahradit awk na moderním mainstreamovém linux distro, když se přesunete do exotičtějších systémů, bude vědět, že awk bude Real Handy.

awk lze také použít pro více než jen zpracování textu. Například jeden z mých supervizorů píše astronomický kód v awk - to je, jak naprosto stará škola a úžasná je. Ve svých dnech to byl nejlepší nástroj pro tuto práci ... a teď, i když jeho studenti jako já používají python a co ne, drží se toho, co zná a funguje dobře. 

V závěru je po celém světě spousta starých kódů, které znají trochu awk. Také to z vás udělá lepší * nix osobu :-)

89
freespace

Jediný důvod, proč používám awk, je automatické rozdělení:

awk '{print $3}' < file.in

Vytiskne třetí pole oddělené mezerami v file.in. Je to o něco jednodušší než:

tr -s ' ' < file.in | cut -d' ' -f3
27
Greg Hewgill

Myslím, že awk je skvělé, pokud váš soubor obsahuje sloupce/pole . Používám ho při zpracování/analýze konkrétního sloupce v souboru s více sloupci. Nebo pokud chci přidat/odstranit určitý sloupec (sloupce). 

např.

awk -F \t '{ if ($2 > $3) print; }' <filename>

bude tisknout pouze v případě, že hodnota druhého sloupce v souboru odděleném tabulátory je větší než hodnota 3. sloupce.

Samozřejmě jsem mohl použít Perl nebo Python, ale awk je to mnohem jednodušší s výstižným jednoduchým příkazem. 

Také učení awk je dost levné. Základy se můžete naučit za méně než hodinu, takže to není tolik úsilí, než naučit se jakýkoli jiný programovací/skriptovací jazyk.

22
Nikhil

Příležitostně používám AWK pro práci s HTML. Tento kód například překládá tabulky do souborů CSV:

BEGIN {s=""; FS="n"}
/<td/ { gsub(/<[^>]*>/, ""); s=(s ", " $1);}
/<tr|<TR/ { print s; s="" }

Což je skvělé, pokud jste na obrazovce škrábání. Vlastně by to mohlo být tak, že miluju AWK, protože mi to dovolí tak rychle vytvořit špatné řešení :) více příkladů . To je také zmíněno v Jon Bentley je krásné programování Pearls .

7
Dave

Používám awk tak často. Je to dobré pro velmi jednoduché míchání textu uprostřed potrubí; vyplňuje velmi úzký výklenek mezi tím, že ho vůbec nepotřebuje, a potřebuje vypudit Perl/Python/cokoliv.

Nedoporučoval bych vám strávit na něm spoustu času, ale mohlo by se hodit znát základy syntaxe - přinejmenším natolik, že si můžete rychle přečíst manuál, pokud ho budete chtít použít.

5
Eevee

Nejvíce awk jeden vložky mohou být dosaženy s Perl jeden vložky - jestliže vy se rozhodnete dostat se do Perlu jeden liner myšlení. Nebo stačí použít Perl tři vložky :)

Pokud zachováváte Shell skripty napsané někým, kdo měl rád awk, pak je jasné, že se budete muset naučit awk.

Dokonce i když to není praktické, pokud již znáte regex, nebude trvat dlouho, než si základy vyzvednete a je zábavné vidět, jak byly věci navrženy. Je to docela elegantní.

5
slim

Pokud již víte a používáte sed, můžete si také vyzvednout alespoň trochu awk. Mohou být spojeny dohromady pro některé mocné triky. Vždy zaujme publikum.

4
Internet Friend

Computerworld nedávno dělal rozhovor s Alfredem V. Aho (jeden ze tří tvůrců AWK) o AWK. Je to docela zajímavé čtení. Takže možná v něm najdete nějaké rady, proč je to dobrý nápad naučit se AWK.

3
dlat

Učení AWK bylo pro mě neocenitelné v mé poslední smlouvě, která pracovala na vestavěném systému Linux, na kterém nebyly instalovány ani Perl ani většina dalších skriptovacích jazyků.

3
George Jempty

6 let po položení této otázky mohu odpovědět s jistotou: ne, učení awk za to nestojí.

Základní úkoly jsou handle, ale základní bash příkazy, nebo dokonce GUI nástroje snadno. Komplexnější úkoly lze snadno řešit pomocí moderních dynamických jazyků, jako je Python (fav nebo mine) nebo Ruby.

Měli byste se konečně naučit mordern skriptovací dynamický jazyk, protože vám pomůže v tolika úkolech (web, admin, křižování dat, automatizace, atd.). Tím, že se naučíte takové nástroje, jako je awk, je naprosto k ničemu, ušetří vám to v nejlepším případě několik sekund každý měsíc.

3
e-satis

awk má velmi dobrý poměr utility/obtížnost, a "jednoduchý awk" funguje v každém Unixu/Linuxu/MacOSu (a může být instalován i v jiných systémech).

Byl navržen ve zlatém věku, kdy lidé nenáviděli psaní, takže skripty mohou být velmi, velmi krátké a rychlé k psaní. Pokusím se nainstalovat mawk, rychlou verzi, údajně zrychluje výpočet asi 9 krát, awk/gawk je poměrně pomalý, takže pokud ho chcete použít místo R atd., Možná budete chtít mawk.

2
BongBong Chu

Je to užitečné zejména v případě, že budete muset občas analyzovat logovací soubory pro data nebo výstupy programů při skriptování Shell, protože je velmi snadné dosáhnout toho, že by vás v Pythonu trochu víc kódů kódů.

Určitě má více síly než to, ale zdá se, že je to pro většinu lidí.

2
NeuroSys

Samozřejmě: Pracuji v prostředí, kde jsou k dispozici pouze dostupné jazyky: (nějaký jazyk shity, který generuje COBOL, OMG, OMG), bash (stará verze), Perl (to ještě nevím), sed, awk a některé další nástroje příkazového řádku. Znalost awk mi ušetřila několik hodin (a vytvořila několik textových úloh z mých sbírek - přijdou ke mně alespoň třikrát denně). 

2
Zsolt Botykai

Řekl bych, že to už asi nestojí za to. Čas od času jej používám jako mnohem všestrannější stream editor, než sed se zahrnutím vyhledávacích schopností, ale pokud jste zběhlý s pythonem, nevím, jaký úkol byste mohli dokončit mnohem rychleji, abyste kompenzovali potřebný čas. učit se awk.

Následující příkaz je pravděpodobně jediný, pro který jsem použil awk v posledních dvou letech (čistí polovinu odstraněných balíčků z mých systémů Debian/Ubuntu):

$ dpkg -l|awk '/^rc/ {print $2}'|xargs Sudo dpkg -P
1

Ani náhodou.

I když by to mohlo být zajímavé, můžete udělat vše, co může dělat pomocí jiných, výkonnějších nástrojů jako je Perl.

Strávit čas učením se těchto silnějších nástrojů - a jen náhodně vyzvednout nějaké awk podél cesty.

1
Ed Guiness

Řekl bych, že je. Pro jednoduché věci je AWK mnohem snazší na nezkušeném sysadminu/vývojáři než Python. Můžete se naučit trochu AWK a dělat spoustu věcí, naučit se Python znamená naučit se úplně nový jazyk (ano, vím, že AWK je také jazyk).

Perl by mohl být schopen udělat spoustu věcí, které AWK dokáže udělat, ale nabídl tuto volbu v tento den a věk bych si vybral Python zde. Takže ano, měli byste se naučit AWK. ale naučte se také Python :-)

1
wzzrd

Teď, když je Perl přenesen do téměř každé významné platformy, řekl bych, že to nestojí za to. Je to všestrannější než sed a awk dohromady. Pokud jde o automatické rozdělení, můžete to udělat v Perlu takto:

Perl -F':' -ane 'print $F[3],"\n";' /etc/passwd

EDIT: můžete stále chtít dostat poněkud seznámit se s awk, protože některé další nástroje jsou založeny na jeho filozofii akcí založených na vzorech (např. DTrace na Solaris).

0
zvrba

Pracuji v oblasti, ve které jsou soubory ve formátu sloupců. Takže awk je neocenitelný pro mě, aby REFORMAT soubor, takže různé software může spolupracovat. Pro jiné než IT profese je použití awk dostačující a perfektní. Nyní den, rychlost počítače není problém, takže mohu kombinovat awk & unix na potrubí mnoho 1 liniové příkaz do "skript". S Awk vyhledávání podle pole a záznamu, používám jej zkontrolovat data souboru velmi rychle, místo "vi" otevřít soubor. Musím říct, že awk schopnosti přinesly radost do mé práce speciálně, jsem schopen pomoci co-dělník třídit rychle pomocí awk. Úžasný kód pro mě.

0
Hai Truong

awk je jazyk powertool, takže pravděpodobně najdete awk někde, pokud jste IT profesionál jakéhokoli druhu. Pokud můžete zpracovat syntaxi a regulární výrazy grep a sed, pak byste neměli mít žádný problém, abyste mohli awk a měli byste to udělat. 

Kde jsem našel awk opravdu zářit je ve zjednodušení věcí, jako je zpracování víceřádkových záznamů a mangling/interpolace více souborů současně. 

0
user4401178

Nedávno jsem se snažil vizualizovat síťové pcap soubory zaznamenávající útok DOS, který činil více než 20Gbs. Potřeboval jsem časové razítko a IP adresy. V mém scénářiAWKone-liner pracoval báječně a také rychle. Konkrétně jsem použilAWKk vyčištění extrahovaných souborů, získání IP adres a celkového počtu paketů z těchto IP adres v rámci skupinového rozpětí času. Úplně souhlasím s tím, co napsali jiní lidé. Záleží na vašich potřebách.

0
Ayush

V současné době dělám nějaké kódování v pythonu. Ale stále to nevím dost dobře na to, abych snadno použila jednoduché jednoduché transformace souborů.

S awk mohu rychle vytvořit jeden řádek kus kódu na příkazovém řádku unixu, který dělá některé docela swish transformace. Pokaždé, když použiju awk, kus kódu, který píšu, bude k dispozici a ne více než několik řádků. Možná, že "if" statment a "printf" prohlášení zde nebo tam na jednom řádku. 

Nikdy jsem napsal kus kódu, který je delší než 10 řádků s awk. Viděl jsem některé takové skripty před lety. 

Ale cokoliv, co vyžadovalo mnoho řádků kódu, musím se uchýlit k pythonu.

Miluji awk. Jedná se o velmi silný nástroj v kombinaci se sed. 

0
user5901715

Jedním z důvodů, proč NENÍ naučit awk, je to, že nemá regulérní výrazy. 

Mám awk kód, který teď musím přepsat jen proto, že jsem náhle debugoval, že neexistuje žádná taková věc jako non-greedy zápasy v awk/gawk tak to nemůže správně provést některé regexes.

0
user619271

Záleží na vašich spoluhráčích a vůdci a na úkolu, na kterém pracujete.

if( team mates and leader ask to write awk ){
  if( you can reject that){
    if( awk code is very small){
      learn little just like learn Regex
    }else{
      use python or even Java
    }
  }else{
    do as they ask
  }
}
0
Kenneth