Manual AWK

download Manual AWK

of 17

Transcript of Manual AWK

Manual AWK( Profa. Isabel H. Manssour - Resumo do manual da gnu, gawk.ps, disponvel em http://www.gnu.org/manual/gawk/) Introduo Executando um Programa awk Comentrios Exemplos Comandos X Linhas Exemplos de Programas de uma Linha Expresses Regulares Escape Sequences Case-sensitivity Comandos de Controle em Aes Comandos print e printf Array em Awk Funes Built-in Arquivos Usados na Execuo dos Exemplos

IntroduoAwk uma linguagem procedural (ou imperativa) interpretada. As suas vantagens em relao a C ou Pascal so: - se for necessrio fazer frequentemente alteraes em vrios arquivos texto, onde quer que seja que certos padres apaream; - se for necessrio extrair dados de algumas linhas de um arquivo enquanto o resto descartado. Ou seja, com awk possvel gerenciar tarefas simples de "reformatar dados" com apenas algumas linhas de cdigo. Com awk possvel: gerenciar pequenos banco de dados pessoais; gerar relatrios; validar dados; produzir ndices, e fazer outras tarefas de preparao de documentos; fazer experimentos com algoritmos que podem ser adaptados posteriormente a outras linguagens de programao. Funo bsica do awk procurar por linhas (ou outras unidades de texto)

em arquivos que possuem certos padres especificados no programa; para cada "padro" (pattern) deve haver uma ao associada, isto , quando uma linha corresponde a um dos padres, awk realiza a ao especificada naquela linha; depois, awk continua processando as linhas de entrada desta maneira at encontrar o fim do arquivo de entrada; o conjunto de comandos "padro-ao" pode aparecer literalmente como um programa ou em um arquivo especfico com a opo "-f "; arquivos de entrada so lidos em ordem; se no h arquivos, a entrada padro lida. Programas em awk so diferentes dos programas na maioria das outras linguagens porque so data-driven, isto , deve-se descrever os dados com os quais se quer trabalhar, e o que fazer quando encontr-los. Em outras linguagens procedurais normalmente mais difcil descrever claramente os dados que o programa ir processar. Por isso, programas awk so mais fceis de escrever e ler. Quando awk executado, deve-se especificar um programa awk que diga o que ele tem que fazer. O programa consiste numa srie de regras, sendo que cada uma especifica um padro que deve ser procurado e uma ao que deve ser tomada quando o padro encontrado. Sintaticamente, uma regra consiste de um padro seguido de uma ao que deve estar entre { e }. Cada regra separada por uma nova linha. Ento, um programa awk se parece com: { } { } ...

Executando um Programa awkExistem vrias maneiras de executar um programa awk. 1) Se o programa pequeno, mais fcil inclu-lo no comando de execuo. Por exemplo: awk '' ... consiste numa srie de padres e aes. Este comando usado quando programas simples so escritos no momento que se deseja utiliz-los. Este formato de comando instrui o shell, ou interpretador de comandos, para iniciar o awk e usar o programa para processar registros nos arquivos de entrada. As aspas simples em torno do programa instruem o shell para: no interpretar os caracteres awk como caracteres especiais do shell; e tratar todo o programa como um nico argumento para awk e permitir que o programa tenha mais do que uma linha. Tambm possvel executar o awk sem arquivos de entrada. Neste caso, quando se digita a linha de comando: awk ' '

o awk aplica o programa entrada padro, o que siginifica que tudo que for digitado no terminal at que seja pressionado CTRL+d. O exemplo a seguir copia os caracteres digitados para a sada padro. $ awk '{ print }' Este eh um exemplo Este eh um exemplo da utilizacao do awk! da utilizacao do awk! Fim! Fim! $_ 2) Quando o programa extenso, mais conveniente coloc-lo em um arquivo e execut-lo da seguinte maneira: awk -f ... -f intrui o awk a pegar o programa do arquivo. Qualquer nome pode ser usado no arquivo. Por exemplo, possvel colocar o programa: BEGIN { print "Hello World!" } no arquivo "exemplo". O comando para execuo : awk -f exemplo Se no fosse utilizado um arquivo, o comando para execuo seria: awk "BEGIN { print \"Hello World! \" }" A contra-barra (\) necessria antes de cada aspas (") interna devido s regras do shell. Considerando programas executveis, possvel escrever scripts em awk usando #!, que funciona em Linux e Unix derivados do Berkeley Unix, System V Release 4 ou 3. Este mecanismo no funciona com sistemas mais antigos. Por exemplo, o arquivo "exemplo" apresentado anteriormente pode ser alterado da seguinte maneira: #! /bin/awk -f BEGIN { print "Hello World!" } Depois, basta transform-lo em um executvel usando o comando chmod e cham-lo a partir do prompt. $ chmod ugo+x exemplo $ exemplo Hello World $_ Isto equivalente a usar o comando awk -f exemplo. A linha que comea com #! contm o caminho e o nome do interpretador que deve ser executado, e tambm comandos de inicializao opcionais que podem ser passados para o interpretador. O sistema operacional ento executa o interpretador com os parmetros fornecidos.

ComentriosNa linguagem awk, um comentrio comea com o caracter #, e continua at o final da linha. O caracter # no precisa ser o primeiro caracter da linha. O arquivo exemplo pode ser alterado para inserir um comentrio da seguinte maneira: # Primeiro programa escrito na LP awk # Este programa apenas exibe uma mensagem na tela BEGIN { print "Hello World!" }

Exemplos1) Exemplo simples awk '/awk/ { print $0 }' texto.txt Este comando executa um programa awk simples que procura pela string "awk" no arquivo de entrada "texto.txt". Quando uma linha que contm "awk" encontrada, ela exibida na tela do computador, pois print $0, ou simplesmente print, significa imprimir a linha corrente. A / que aparece antes e depois de awk indicam que awk o padro a ser procurado. As aspas simples ao redor do programa notifica o shell para no interpretar os caracteres como caracteres especiais do shell. Este programa tambm poderia ser escrito em um arquivo, como por exemplo: #! /bin/awk -f BEGIN { print "Ocorrencias: " } # padrao procurado /\/ { print } Neste caso a execuo seria: $ texto.txt Numa regra awk tanto o padro como a ao podem ser omitidos, mas no ambos. Se o padro omitido, ento a ao executada para cada linha de entrada. Se a ao omitida, a ao default imprimir todas as linhas que correspondam ao padro. Ento, possvel eliminar a ao (o comando print) neste exemplo e o resultado seria o mesmo. Por exemplo: $ awk '/awk/' texto.txt Porm, omitir o comando print e manter {}, faz com que uma ao "vazia" seja definida, isto , nada realizado. Por exemplo: awk '/awk/ { }' texto.txt 2) Exemplo com duas regras O interpretador awk l os arquivos de entrada linha a linha, e para cada uma ele testa o padro especificado na(s) regra(s). Se vrios padres so

encontrados, ento vrias aes so executadas na ordem em que aparecem no programa awk. Se nenhum padro encontrado, nenhuma ao executada. Por exemplo, o seguinte programa awk contm duas regras: $ awk '/12/ { print $0 } > /21/ { print $0 }' lista1.txt lista2.txt A primeira regra possui a string 12 como padro e print $0 como ao. A segunda regra tem a string 21 como padro e tambm print $0 como ao. As aes sempre devem estar entre { e }. O programa exibe cada linha que contm a string 12 ou 21. Se uma linha contm as duas strings, ela exibida duas vezes, uma para cada regra.

Comandos X LinhasGeralmente cada linha em um programa awk um "separador" de comandos ou de regras, como por exemplo: $ awk '/12/ { print } /21/ { print }' lista1.txt Entretanto, gawk ir ignorar novas linhas depois de um dos seguintes caracteres: , { ? : || && do else Uma nova linha em qualquer outro ponto considerada o final de um comando. Se o programador quiser "dividir" um nico comando em duas linhas, basta colocar o caracter \ no final da primeira linha. Este caracter no final da linha indica que o comando continua, e pode ser usado em qualquer parte de um comando, at no meio de uma string ou expresso. Por exemplo: $ awk '/Esta expressao eh muito extensa, por isso continua\ na proxima linha/ { print } awk uma linguagem "orientada a linha". Cada ao de uma regra deve comear na mesma linha do padro. Para ter o padro e a ao em linhas separadas, deve-se usar \. Torna-se importante salientar que, alm do uso deste caracter para "diviso" de um comando s ser permitido em arquivos de programas, ele no aceito em todas as verses de awk. Quando os comandos awk so "pequenos", pode-se colocar mais do que um em uma nica linha separados por ;. Por exemplo: $ awk '/12/ { print };/21/ { print }' lista1.txt

Exemplos de Programas de uma LinhaMuitos programas awk teis possuem apenas uma ou duas linhas.

1) Programa que imprime o tamanho da maior linha. $ awk '{ if (length($0) > max) max=length($0) } END { print max }' texto.txt 2) Programa que imprime todas as linhas que possuem mais do que 80 caracteres. A nica regra possui uma expresso relacional e seu padro, e no possui ao. Portanto, a ao default, imprimir o registro, tomada. $ awk 'length($0) > 80' texto.txt 3) Este programa imprime cada linha que possui pelo menos um campo. Esta uma maneira simples de eliminar linhas em branco de um arquivo. $ awk 'NF>0' texto.txt 4) Este programa imprime sete nmeros randmicos de 0 a 100, inclusive. $ awk 'BEGIN { for(i=1; 1