Domanda

Sto imparando costantemente nuovi strumenti, anche quelli vecchio stile, perché mi piace usare la soluzione giusta per il problema.

Tuttavia, mi chiedo se ci siano ancora motivi per impararne alcuni. awk per esempio è interessante per me, ma per una semplice elaborazione del testo, posso usare grep , cut , sed , ecc. mentre per quelli complessi, sceglierò Python.

Ora non intendo dire che non è uno strumento potente e utile. Ma dal momento che ci vuole tempo ed energia per imparare un nuovo strumento, ne vale la pena ?

È stato utile?

Soluzione

Penso che dipenda dall'ambiente in cui ti trovi. Se sei una persona * nix, sapere che awk è una buona cosa. L'unico altro ambiente di scripting che può essere trovato praticamente su ogni * nix è sh . Quindi, mentre grep , sed, etc possono sicuramente sostituire awk su una distribuzione tradizionale linux , quando si passa a sistemi più esotici, sapendo un po ' awk sarà Real Handy.

awk può anche essere usato per qualcosa di più della semplice elaborazione del testo. Ad esempio, uno dei miei supervisori scrive il codice di astronomia in awk - ecco come è vecchia scuola e fantastico . Ai suoi tempi, era lo strumento migliore per il lavoro ... e ora anche se i suoi studenti come me usano il pitone e cosa no, si attacca a ciò che sa e funziona bene.

In chiusura, c'è un sacco di vecchio codice che calcia in tutto il mondo, sapendo che un po ' awk non farà male. Ti renderà anche migliore * nix persona :-)

Altri suggerimenti

Se impari rapidamente le basi di awk, puoi davvero fare cose straordinarie dalla riga di comando.

Ma il vero motivo per imparare awk è avere una scusa per leggere il superbo libro The AWK Programming Language dai suoi autori Aho, Kernighan e Weinberger. Penseresti, dal nome, che ti insegna semplicemente a meraviglia. In realtà, questo è solo l'inizio. Lanciandosi nella vasta gamma di problemi che possono essere affrontati quando si utilizza un linguaggio di scripting conciso che semplifica la manipolazione delle stringhe - e awk è stato uno dei primi - si procede a insegnare al lettore come implementare un database, un parser, un interprete e (se la memoria mi serve) un compilatore per un linguaggio informatico specifico per un piccolo progetto! Se solo avessero programmato un sistema operativo di esempio usando awk, il libro sarebbe stato un'introduzione al sondaggio abbastanza completa sull'informatica!

Notoriamente chiaro e conciso, come l'originale libro in lingua C, è anche un meraviglioso esempio di scrittura tecnica amichevole fatta bene. Anche l'indice è un pezzo di artigianato.

Awk? Se lo conosci, lo utilizzerai dalla riga di comando di tanto in tanto, ma per qualcosa di più grande ti sentirai intrappolato, incapace di accedere alle funzionalità più ampie del tuo sistema e di Internet a cui qualcosa come Python fornisce l'accesso. Ma il libro? Sarai sempre felice di leggerlo!

L'unica ragione per cui utilizzo awk è la divisione automatica:

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

Stampa il terzo campo delimitato da spazi bianchi in file.in . È un po 'più semplice di:

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

Penso che awk sia fantastico se il tuo file contiene colonne / campi . Lo uso durante l'elaborazione / analisi di una particolare colonna in un file a più colonne. O se voglio aggiungere / eliminare una o più colonne particolari.

per es.

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

verrà stampato solo se il valore della seconda colonna in un file separato da tabulazioni è maggiore del valore della terza colonna.

Naturalmente potrei usare Perl o Python, ma awk lo rende molto più semplice con un comando conciso a riga singola.

Anche l'apprendimento di awk è piuttosto economico. Puoi apprendere le nozioni di base di Awk in meno di un'ora, quindi non è così semplice come imparare qualsiasi altro linguaggio di programmazione / scripting.

Uso AWK di tanto in tanto per gestire HTML. Ad esempio, questo codice traduce le tabelle in file CSV:

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

Il che è fantastico se stai raschiando lo schermo. In realtà, potrebbe essere il caso che adoro AWK perché mi consente di creare la soluzione sbagliata ai problemi così rapidamente :) altri esempi . È anche menzionato nell'incantevole

Uso awk ogni tanto. Va bene per il semplice rimescolamento del testo nel mezzo di una pipeline; riempie una nicchia molto stretta tra il non averne bisogno e la necessità di tirare fuori Perl / Python / qualunque cosa.

Non consiglierei di dedicare molto tempo ad esso, ma potrebbe esserti utile conoscere le basi della sintassi - almeno abbastanza da poter consultare rapidamente il manuale nel caso tu voglia usarlo .

La maggior parte delle fodere di un awk può essere ottenuta con le fodere di Perl one - se si sceglie di entrare in una mentalità di linea Perl one. Oppure, basta usare Perl tre fodere :)

Se stai mantenendo gli script di shell scritti da qualcuno a cui piace awk, allora chiaramente dovrai imparare awk.

Anche se non c'è bisogno pratico, se conosci già regex non ci vorrà molto a capire le basi, ed è divertente vedere come sono state progettate le cose allora. È piuttosto elegante.

Se conosci e usi già sed, potresti anche prendere un po 'di awk. Possono essere convogliati insieme per alcuni trucchi piuttosto potenti. Colpisce sempre il pubblico.

6 anni dopo aver fatto questa domanda, ora posso rispondere con certezza: no, imparare awk non ne vale la pena.

Le attività di base sono gestite ma i comandi bash di base o persino gli strumenti della GUI sono facili. Compiti più complessi saranno facilmente affrontati con linguaggi dinamici moderni come Python (fav o mine) o Ruby.

Dovresti assolutamente imparare un linguaggio dinamico di scripting moderno in quanto ti aiuterà in così tante attività (web, admin, crunching dei dati, automazione, ecc.). E così facendo l'apprendimento di strumenti come awk è completamente inutile, ti farà risparmiare al massimo qualche secondo ogni mese.

Computerworld ha recentemente pubblicato una intervista con Alfred V. Aho (uno dei tre creatori di AWK) su AWK. È una lettura abbastanza interessante. Quindi forse troverai alcuni suggerimenti, perché è una buona idea imparare AWK.

L'apprendimento di AWK è stato prezioso per me nel mio ultimo contratto di lavoro su un sistema Linux incorporato su cui né Perl né la maggior parte degli altri linguaggi di scripting erano installati.

È utile soprattutto se devi analizzare occasionalmente i file di registro per i dati o l'output dei programmi durante lo scripting della shell, perché è molto facile ottenere in awk che ti porterebbe un po 'più di righe di codice in Python.

Ha sicuramente più potere di quello, ma questo sembra essere un compito per cui la maggior parte delle persone lo usa.

Certo: sto lavorando in un ambiente in cui le uniche lingue disponibili sono: (un linguaggio shity che genera COBOL, OMG, OMG), bash (vecchia versione), perl (non lo conosco ancora), sed, awk e alcune altre utility da riga di comando. Conoscere awk mi ha permesso di risparmiare diverse ore (e di aver generato diverse attività di elaborazione del testo dai miei colleghi - vengono da me almeno tre volte al giorno).

awk ha un ottimo rapporto utilità / difficoltà, e "semplice awk" funziona su ogni Unix / Linux / MacOS (e può essere installato anche su altri sistemi).

È stato progettato in Golden Age quando le persone odiavano scrivere, quindi gli script possono essere molto, molto brevi e veloci da scrivere. Proverò a installare mawk, una versione veloce, presumibilmente accelera il calcolo circa 9 volte, awk / gawk è piuttosto lento, quindi se vuoi usarlo al posto di R ecc. Potresti voler fare mawk.

Direi che probabilmente non ne vale più la pena. Lo uso di tanto in tanto come editor di stream molto più versatile di sed con capacità di ricerca incluse, ma se sei esperto di Python non conosco un compito che potresti finire molto più velocemente per compensare il tempo necessario per imparare awk.

Il seguente comando è probabilmente l'unico per cui ho usato awk negli ultimi due anni (elimina i pacchetti parzialmente rimossi dai miei sistemi Debian / Ubuntu):

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

No.

Anche se potrebbe essere interessante, puoi fare tutto ciò che Awk può fare usando altri strumenti più potenti come Perl.

Trascorri il tuo tempo imparando quegli strumenti più potenti - e, per inciso, raccogli solo un po 'di imbarazzo lungo la strada.

Direi che c'è. Per cose semplici, AWK è molto più semplice per i programmatori / sviluppatori inesperti rispetto a Python. Puoi imparare un po 'di AWK e fare molte cose, imparare Python significa imparare una lingua completamente nuova (sì, so che AWK è una lingua è anche un senso).

Perl potrebbe essere in grado di fare molte cose che AWK può fare, ma al giorno d'oggi offrivo la scelta di scegliere Python. Quindi sì, dovresti imparare AWK. ma impari anche Python :-)

Ora che PERL è portato su praticamente tutte le piattaforme significative, direi che non ne vale la pena. È più versatile di sed e awk insieme. Per quanto riguarda la divisione automatica, puoi farlo in perl in questo modo:

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

EDIT: potresti ancora voler in qualche modo conoscere awk, perché alcuni altri strumenti sono basati sulla sua filosofia di azioni basate su schemi (ad esempio DTrace su Solaris).

Lavoro nell'area in cui i file sono in formato colonna. Quindi awk ha un valore inestimabile per me RIFORMARE il file in modo che software diversi possano lavorare insieme. Per i professionisti non IT, l'utilizzo di awk è sufficiente e perfetto. Ora un giorno, la velocità del computer non è un problema, quindi posso combinare awk & amp; unix per reindirizzare molti comandi 1 liners in uno "script". Con Awk cerca per campo e record, lo uso per controllare i dati del file molto velocemente, invece di "vi". per aprire un file. Devo dire che la capacità di awk ha portato gioia al mio lavoro in particolare, sono in grado di aiutare il collega a risolvere rapidamente le cose usando awk. Codice fantastico per me.

Di recente stavo cercando di visualizzare i file pcap di rete che registravano un attacco DOS che ammontava a oltre 20 Gbs. Avevo bisogno del timestamp e degli indirizzi IP. Nel mio scenario, AWK one-liner ha funzionato egregiamente e abbastanza velocemente. Ho usato specificamente AWK per pulire i file estratti, ottenere gli indirizzi IP e il conteggio totale dei pacchetti da quegli indirizzi IP in un arco di tempo raggruppato. Sono totalmente d'accordo con ciò che altre persone hanno scritto sopra. Dipende dalle tue esigenze.

awk è un linguaggio powertool, quindi probabilmente troverai awk utilizzato da qualche parte se sei un professionista IT di qualsiasi tipo. Se riesci a gestire la sintassi e le espressioni regolari di grep e sed , non dovresti avere problemi a raccogliere awk e probabilmente ne vale la pena.

Dove ho trovato awk davvero brillare è nel semplificare cose come l'elaborazione di record multilinea e la manipolazione / interpolazione di più file contemporaneamente.

Uno dei motivi per NON imparare awk è che non ha corrispondenze non avide nelle espressioni regolari.

Ho un codice awk che ora devo riscrivere solo perché ho improvvisamente eseguito il debug del fatto che non ci sono corrispondenze non avide in awk / gawk, quindi non è possibile eseguire correttamente alcune regex.

Dipende dai tuoi compagni di squadra, dal tuo leader e dal compito su cui stai lavorando.

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
  }
}

Attualmente sto facendo un po 'di programmazione in Python. Ma ancora non lo so abbastanza bene da usare facilmente per semplici trasformazioni di file una tantum.

Con awk posso sviluppare rapidamente un pezzo di codice a una riga sulla riga di comando unix che esegue alcune trasformazioni piuttosto rapide. Ogni volta che uso awk, il pezzo di codice che scrivo sarà usa e getta e non più di alcune righe. Forse un " if " statment e " printf " dichiarazione qua o là su una riga.

Non ho mai scritto un pezzo di codice lungo più di 10 righe con awk. Ho visto alcuni script del genere anni fa.

Ma qualunque cosa richiedesse molte righe di codice, ricorrerei a Python.

I love awk. È uno strumento molto potente in combinazione con sed.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top