awk, mawk, nawk, gawk… O QUE?


37

Eu apenas comecei a aprender awk e estou um pouco confuso sobre todas essas versões. Existe alguma "versão" encontrada em todos os sistemas Unix? Como, você sabe, vi simples? O awk padrão suporta a opção -F?

Respostas:


37

awk - o mais comum e será encontrado na maioria dos sistemas Unix, versão mais antiga e inferior aos sistemas mais novos.

mawk - implementação rápida do AWK cuja base de código é baseada em um interpretador de código de bytes.

nawk - enquanto a linguagem AWK estava sendo desenvolvida, os autores lançaram uma nova versão (daí o n - n ew awk) para evitar confusão. Pense nisso como o Python 3.0 do AWK.

gawk - abreviado de GNU awk. A única versão na qual os desenvolvedores tentaram adicionar o suporte ao i18n. Permitiu que os usuários escrevessem suas próprias bibliotecas compartilhadas em C para estendê-las com seus próprios "plug-ins". Esta versão é a implementação padrão do Linux, o AWK original foi escrito para o Unix v7.

Existem outras versões como jawk (implementação em java), bwk (implementação de Brian W. Kernighan) e assim por diante.


3
O awk original não está presente em nenhum sistema semelhante ao Unix que tenho disponível. Freqüentemente, /usr/bin/awkrodará nawk, ou gawk, ou BusyBox awk (comportamento semelhante ao gawk).
precisa

10
No final de 2012, os sistemas Ubuntu / Debian instalavam o mawk por padrão. A linha de comando file /etc/alternatives/awkretornasymbolic link to /usr/bin/mawk
Mike Sherrill 'Cat Recall'

o MAWK possui todas as funcionalidades do GAWK, como matrizes multidimensionais verdadeiras?
WYSIWYG

2
@JordonBedwell Sim. Existem: repetições regex não são possíveis no mawk. Também não suporta matrizes multidimensionais.
WYSIWYG

1
@dubiousjim O Ubuntu possui o awk original no repositório do universo.
jarno

6

Você pode apenas usar awk. É definido pelo POSIX e, portanto, deve existir em todos os sistemas em conformidade com o POSIX.

O -Fparâmetro também é obrigatório por isso .


1
... mas verifique com o padrão o que você pode usar para garantir a compatibilidade com outra versão. Não, por exemplo, o uso gensub(), o teste com awk-> gawk, e acho que você está pronto para ir ...
dmckee

1
@dmckee, você pode usar gawk --posixpara fazer o gawk funcionar de acordo com o padrão POSIX. Ele também verifica se o seu script segue o padrão. Você pode usar awk --posix '' 2>/dev/nullno Ubuntu não importa se gawk, mawk ou original-awk são usados ​​como awk, mas a opção posix é reconhecida apenas pelo gawk. --posix deve ser a última opção para o original-awk. Você pode usar awk -W posix ''com gawk e mawk.
jarno

1
@dmckee, oh mawk --posix ''não, se você usar mawk 1.3.3, mas sucede com a mensagem de erro, se você usar mawk 1.3.4
Jarno

1

awkestará presente em quase todos os sistemas baseados no * NIX, mas as especificidades exatas do que ele suporta serão levemente alteradas, pois é perfeitamente possível que seja simplesmente /bin/shvinculado a uma versão diferente, semelhante à frequência com que está vinculada a um shell específico, geralmente bashou a um dos seguintes. seus derivados. (Para o registro, eu também conheço muitas máquinas nas quais também viestá vinculado vim.)


Nem sempre precisa ser ligado a um link simbólico; às vezes é vinculado.
precisa

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.