awk, mawk, nawk, gawk ... CHE COSA?


38

Ho appena iniziato a studiare awk e sono un po 'confuso su tutte quelle versioni in circolazione. Esiste una "versione" che si trova su tutti i sistemi simili a Unix? Come, sai, vi? Lo standard awk supporta l'opzione -F?

Risposte:


37

awk - il più comune e si troverà sulla maggior parte dei sistemi simili a Unix, versione più vecchia e inferiore a quelli più recenti.

mawk - implementazione veloce di AWK che è base di codice basata su un interprete di codice byte.

nawk - mentre il linguaggio AWK era in fase di sviluppo, gli autori hanno rilasciato una nuova versione (da qui il n - n ew awk) per evitare confusione. Pensalo come il Python 3.0 di AWK.

gawk - abbreviato da GNU awk. L'unica versione in cui gli sviluppatori hanno tentato di aggiungere il supporto i18n. Consentito agli utenti di scrivere le proprie librerie condivise in C per estenderle con i propri "plug-in". Questa versione è l'implementazione standard per Linux, AWK originale è stato scritto per Unix v7.

Esistono altre versioni come jawk (implementazione java), bwk (implementazione di Brian W. Kernighan) e così via.


3
Il awk originale non è presente su alcun sistema simile a Unix che ho disponibile. Spesso /usr/bin/awkeseguirà nawk, o gawk, o BusyBox awk (simile nel comportamento a gawk).
dubiousjim,

10
A partire dalla fine del 2012, i sistemi Ubuntu / Debian installano mawk per impostazione predefinita. La riga di comando file /etc/alternatives/awkritornasymbolic link to /usr/bin/mawk
Mike Sherrill "Cat Recall",

MAWK ha tutte le funzionalità GAWK come i veri array multidimensionali?
WYSIWYG,

2
@JordonBedwell Yep .. Ci sono: ripetizioni regex non sono possibili in mawk. Inoltre, non supporta array multidimensionali.
WYSIWYG,

1
@dubiousjim Ubuntu ha original-awk nel repository dell'universo.
jarno,

6

Puoi semplicemente usare awk. È definito da POSIX e pertanto deve esistere su tutti i sistemi conformi a POSIX.

Anche il -Fparametro è obbligatorio .


1
... ma assicurati di verificare con lo standard per sapere cosa puoi usare per assicurare la compatibilità con altre versioni. Ad esempio, non usare gensub(), testare con awk-> gawke pensare di essere bravo ad andare ...
dmckee,

1
@dmckee, puoi usare gawk --posixper far funzionare gawk secondo lo standard POSIX. Verifica inoltre che lo script segua lo standard. Puoi usare awk --posix '' 2>/dev/nullUbuntu a prescindere, se gawk, mawk o original-awk sono usati come awk, ma l'opzione posix è riconosciuta solo da gawk. --posix deve essere l'ultima opzione per original-awk. Puoi usarlo awk -W posix ''con gawk e mawk.
jarno,

1
@dmckee, oh mawk --posix ''fallisce, se usi mawk 1.3.3, ma riesce con un messaggio di errore, se usi mawk 1.3.4
jarno

1

awksarà su quasi tutti i sistemi basati su * NIX, ma le specifiche esatte di ciò che supporta si sposteranno leggermente poiché è del tutto possibile che sarà semplicemente collegato a una versione diversa simile a come /bin/shè spesso collegato a una shell specifica, spesso basho uno dei i suoi derivati. (Per la cronaca, conosco anche molte macchine a cui viè anche collegato un link simbolico vim.)


Non è necessario essere sempre link simbolici; a volte è fortemente collegato.
dubiousjim,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.