Vous êtes sur la page 1sur 17

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

Introduo
Awk 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: <padro> { <ao> } <padro> { <ao> } ...

Executando um Programa awk


Existem vrias maneiras de executar um programa awk. 1) Se o programa pequeno, mais fcil inclu-lo no comando de execuo. Por exemplo: awk '<Programa>' <Arq1Entrada> <Arq2Entrada> ... <programa> 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 '<programa> '

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 <ArqPrograma> <Arq1Entrada> <Arq2Entrada> ... -f <ArqPrograma> 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.

Comentrios
Na 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!" }

Exemplos
1) 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 /\<awk\>/ { print } Neste caso a execuo seria: $ <nome_arq_executavel> 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 Linhas
Geralmente 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 Linha


Muitos 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<=7; i++) print int(101*rand()) }' 5) Este programa imprime o nmero total de bytes usados pelos <arquivos>. $ ls -lg <arquivos> | awk '{x+= $5}; END {print "total bytes:" x}' 6) Este programa conta o nmero de linhas em um arquivo $ awk 'END { print NR }' <arquivo>

Expresses Regulares
Uma expresso regular uma maneira de descrever um conjunto de strings. A expresso regular mais simples uma seqncia de letras, nmeros, ou ambos. Uma expresso regular pode ser usada como um padro quando colocada entre /. Neste caso ela comparada com cada registro em todo o texto. Normalmente s necessrio encontrar uma parte do texto para ter sucesso. O seguinte exemplo imprime o segundo campo de cada registro que contm os trs caracteres 'awk' em qualquer posio. $ awk '/awk/ { print $2 }' texto.txt Expresses regulares tambm podem ser usadas na correspondncia de expresses. Estas expresses permitem especificar uma string a ser procurada que no precisa ser todo o registro de entrada. Os operadores ~ e !~ realizam comparaes de expresses regulares. Expresses que usam estes operadores podem ser usadas como um padro ou em comandos if, while, for e do. Por exemplo: ~ /<expresso_regular>/ retorna verdadeiro se a expresso <exp> corresponder a

<expresso_regular>. Os prximos exemplos so usados para "selecionar" todos os registros de entrada que possuem a letra 'a' em algum lugar do primeiro campo. $ awk '$1 ~ /a/' lista1.txt $ awk '{ if ($1 ~ /a/) print }' lista1.txt Quando uma expresso regular est entre /, ela chamada de expresso regular constante (5.27 uma constante numrica e "awk" uma constante do tipo string).

Escape Sequences
Alguns caracteres no podem ser includos "literalmente" em expresses regulares constantes. Neste caso eles so representados com escape sequences, que so seqncias de caracteres que comeam com \. Isto til, por exemplo, para incluir " numa constante do tipo string. Por exemplo: $ awk 'BEGIN { print "Ele disse \"Oi!\" para ela." }' O prprio caracter \ no pode ser includo normalmente; deve-se colocar '\\' para que um '\' faa parte da string. O caracter \ tambm usado para representar caracteres que no podem ser exibidos, tais como tab ou newline. Outras utilizaes so apresentadas abaixo: \\ \ \/ / \" " \a Caracter de alerta (beep) \t tab horizontal \v tab vertical \b Backspace \f Formfeed \n Newline \r Carriage return

Operadores de Expresses Regulares


Expresses regulares podem ser combinadas com caracteres chamados de operadores de expresses regulares ou metacaracteres, apresentados

a seguir.

\ usado para suprimir o significado especial de um caracter quando encontrado. Por exemplo: \$, corresponde ao caracter $ ^ Corresponde ao incio de uma string. Por exemplo: ^@chapter, corresponde a uma string que comea com '@chapter'. $ similar a ^, mas corresponde ao fim de uma string. Por exemplo: p$, corresponde a um registro que termina do 'p'. . O ponto corresponde a um nico caracter, incluindo newline. Por exemplo: .P, corresponde a qualquer caracter seguido por P em uma string. [..] Esta a chamada lista de caracteres. Corresponde aos caracteres que esto entre [ e ]. Por exemplo: [MVX], corresponde a qualquer um dos caracteres 'M', 'V ou 'X' em uma string. Um intervalo indicado por um hfen (exemplo: [0-9]). Classe de caracter uma notao especial para descrio de listas de caracteres que possuem um atributo especfico. Uma classe de caracter consiste de: [: :]. Algumas classes de caracteres so: [:alnum:] caracteres alfanumricos [:alpha:] caracteres alfabticos [:blank:] espao e tab [:digit:] caracteres numricos [:cntrl:] caracteres de controle [:print:] caracteres que podem ser impressos(- caracteres de controle) [:punct:] caracteres de pontuao Uma classe de equivalncia um nome para uma lista de caracteres que so equivalentes, que deve estar entre [= e =]. Por exemplo: e pode ser usado para representar e, ou . Neste caso, [[=e]] uma expresso regular que corresponde a qualquer um destes caracteres (e,,). [^..] Corresponde a qualquer caracter exceto os listados. Por exemplo: [^0-9] corresponder a qualquer caracter que no um dgito. | um operador usado para especificar alternativas. Por exemplo: ^P|[0-9] corresponde a qualquer string que comea com P ou contm um dgito. (..) So usados para agrupar expresses regulares, assim como aritmticas. * Este smbolo significa que a expresso regular precedente pode ser repetida quantas vezes for necessrio. Por exemplo: ph* corresponde a um p seguido de vrios h. + similar a *, a expresso precedente deve aparecer pelo menos uma vez. Isto significa que wh+y corresponde a why e whhy, mas no wy. ? similar a *, mas a expresso precedente deve aparecer uma ou nenhuma vez. Por exemplo: fe?d corresponde a fed e fd.

{n} {n,} {n,m} Um ou dois nmeros entre { e } denota uma expresso de intervalo. Por exemplo: wh{3}y corresponde a whhhy, mas no a why ou whhhhy; wh{3,5}y corresponde somente a whhhy, ou whhhhy ou whhhhhy; wh(2,}y corresponde a whhy ou whhhy e assim por diante.

Em expresses regulares os operadores *, + e ?, bem como { e }, possuem a maior precedncia, seguidos pela concatenao e por |. Parnteses podem mudar como os operadores so agrupados.

Case-sensitivity
A correspondncia de caracteres case-sensitive. Isto significa que um w em uma expresso regular corresponde somente a w e no W. A maneira mais simples de solucionar este problema usar uma lista de caracteres [Ww]. Entretanto isto pode tornar a leitura de expresses regulares mais difcil. Outra maneira usar as funes tolower ou toupper. Por exemplo: tolower($1) ~ /foo/ {...} converte o primeiro campo para minsculas antes de fazer a comparao. Outra maneira ainda setar a varivel IGNORECASE para um valor no zero, pois neste caso as operaes com expresses regulares e string ignoram a diferena entre maisculas e minsculas. Por exemplo: x = "aB" if (x ~ /ab/) ... # este teste ir falhar IGNORECASE = 1 if (x ~ /ab/) ... # agora ir funcionar

Comandos de Controle em Aes


Comandos de controle tais como if e while, controlam o fluxo de execuo em programas awk. A maioria deles so similares as comandos da linguagem C. Comando if-else: if (<condio>) { <comandos> } if (<condio>) { <comandos> } else { <comandos> } Exemplo: if ( x % 2 == 0 ) print "x eh par" else print "x eh impar" ou if ( x % 2 == 0 ) print "x eh par"; else

print "x eh impar" Comando while: while (<condio>) { <comandos> } Exemplo: $ awk '{ i = 1 while ( i <= 3 ) { print $i i++ } }' lista1.txt Comando do-while: do { <comandos> } while ( <condio> ) Exemplo: $ awk '{ i = 1 do { print $0 i++ } while ( i<= 10 ) }' lista1.txt Comando for: for( <inicializao>; <condio>; <incremento> ) <comandos> Exemplo: $ awk '{ for (i=1; i<=3; i++) print $i }' lista1.txt Comando break: Fora o trmino imediato do lao de onde chamado (for, while ou do). Ele no tem significado quando usado fora do corpo de um lao. Comando continue: Assim como o break, usado somente dentro de um lao (for, while ou do). Ao invs de forar o trmino do lao, este comando faz com que ocorra a prxima iterao do lao, pulando qualquer cdigo intermedirio. Comando next: Fora o awk a parar imediatamente de processar o registro corrente e passar para o prximo registro. Comando nextfile: Similar ao comando next, ao invs de abandonar o

processamento do registro corrente, o comando nextfile instrui o awk a parar de processar o arquivo corrente. Comando exit: Faz com que o awk pare imediatamente de processar a regra corrente e pare de processar a entrada; qualquer entrada restante ignorada.

Comandos print e printf


O print um comando de sada simples (padro). J o printf usado quando se deseja uma sada formatada. O comando print exige simplesmente a especificao da lista de nmeros, strings, variveis, expresses awk e/ou campos do registro corrente (tal como $1), que devem ser exibidos, separados por vrgula. Eles so, ento, exibidos separados por espaos em branco e seguidos por uma nova linha. Opcionalmente, a lista de nmeros e strings pode ser colocada entre parnteses. O print sem um item especificado, equivalente a print $0, e imprime todo o registro corrente. Para imprimir uma linha em branco usa-se print "", onde "" a string vazia. Exemplos do $ awk $ awk $ awk comando print: 'BEGIN { print "line one \nline two \nline three" }' '{ print $1 $2 }' lista1.txt 'BEGIN { print "Campo1 Campo2" print "------ ------" } { print $1, " ", $2 }' lista1.txt

O default no comando print separar os campos com um espao em branco. Entretanto, qualquer seqncia de caracteres pode ser usada, basta inicializar a varivel OFS (Output Field Separator). Da mesma maneira, possvel trocar a forma de separar os registros, cujo default uma nova linha. Neste caso, deve-se inicializar a varivel ORS (Output Record Separator). Por exemplo: $ awk 'BEGIN { OFS = ";"; ORS = "\n\n" } > { print $1, $2 }' lista1.txt Carla;3226.12.12 Ivan;3340.11.00 Maria;3223.78.21

Regis;3332.12.21 Para se ter um controle mais preciso da formatao, bem como para alinhar colunas de dados de uma maneira fcil, utiliza-se printf. Com printf possvel especificar a largura que ser usada para cada item e vrias maneiras de formatar nmeros. Este comando usado da seguinte maneira: printf formato, item1, item2, ... onde o formato muito semelhante ao ANSI C (ex.: %c, %s, %i, %4.3f). Exemplo da utilizao do printf: $ awk '{ printf "%-10s %s\n", $1, $2 }' lista1.txt Carla 3226.12.12 Ivan 3340.11.00 Maria 3223.78.21 Regis 3332.12.21

Array em Awk
Um array uma tabela de valores, chamados elementos. Os elementos de um array so distinguidos por ndices. ndices em awk podem ser tanto nmeros como strings, e cada array deve ter um nome (mesma sintaxe dos nomes de variveis). Arrays em awk so semelhantes s outras linguagens, mas existem algumas diferenas fundamentais. Em awk no necessrio especificar o tamanho de um array antes de comear a us-lo. Adicionalmente, qualquer nmero ou string pode ser usado como indice do array, e no apenas nmeros inteiros consecutivos. Na verdade, Arrays em awk so associativos. Isto significa que cada array uma coleo de pares: um ndice, e o valor do elemento correspondente, como exemplificado abaixo: Elemento 4 Valor 30 Elemento 2 Valor "awk" Elemento 1 Valor 8 Elemento 3 Valor "" Os pares acima esto fora de ordem porque a ordem irrelevante. Uma vantagem do array associativo que novos pares podem ser adicionados em qualquer momento. Para ilustrar, no exemplo anterior possvel inserir o valor "numero 10" na dcima posio: Elemento 10 Valor "numero 10" Elemento 4 Valor 30 Elemento 2 Valor "awk" Elemento 1 Valor 8 Elemento 3 Valor ""

Desta maneira o array fica esparso, isto , faltam alguns ndices. Outra conseqncia dos arrays associativos que os ndices no precisam ser nmeros inteiros positivos. Por exemplo, logo abaixo apresentado um array que traduz palavras do Ingls para o Francs: Element "dog" Valor "chien" Element "cat" Valor "chat" Element "one" Valor "un" Element 1 Valor "un" Um cuidado que deve ser tomado, que letras maisculas so diferentes de minsculas, e o valor de IGNORECASE no tem efeito. Deve-se usar a mesma string para armazenar e recuperar um elemento do array. Quando awk cria um array, por exemplo com uma funo, o array criado possuir ndices inteiros consecutivos que comeam em um. A principal maneira de usar um array referenciar um dos seus elementos, da seguinte maneira: nome_array[ndice] Se for usada uma referncia para um elemento que no est armazenado, o valor resultante "" (string nula). possvel verificar se um elemento, num certo ndice, existe em um array com a expresso: ndice in nome_array Assim, pode-se testar quando um ndice existe ou no. Se nome_array[ndice] existe, retornado o valor 1 (verdadeiro), caso contrrio retornado 0 (falso). O exemplo abaixo ilustra a utilizao de arrays. #! /bin/awk -f # Comandos que serao executados antes de varrer o arquivo BEGIN { print "Este programa ordena um arquivo cujas linhas sao numeradas!\n" } # Comandos que serao executados depois de varrer o arquivo END { print "Arquivo Ordenado: \n" for (i=1; i<=max; i++) if (i in vetor) # para evitar linhas em branco print vetor[i] } # Comandos que serao executados enquanto varre o arquivo { if ($1 > max) max = $1 vetor[$1] = $0

} Para percorrer todos os elementos de um array cujos ndices no so nmeros inteiros em ordem crescente, awk possui um comando for "especial": for ( var in array ) <comandos> Este lao executa os comandos uma vez para ndice do array que tenha sido previamente usado no programa, com a varivel var "setada" para o ndice. Exemplo: #! /bin/awk -f # Exemplo com array cujos ndices no so nmeros inteiros # Armazena 1 para cada palavra que usada pelo menos uma vez { # NF nmero de campos do registro de entrada corrente for (i=1; i<=NF; i++) # armazena 1 para cada palavra que usada pelo menos uma vez pal_usadas[$i] = 1 } # Comandos que serao executados depois de varrer o arquivo END { for (x in pal_usadas) if (length(x)>10) { ++num_pal_longas print x } print num_pal_longas, "palavras maiores que 10 caracteres!" } A ordem na qual os elementos do array so acessados por este comando determinada pelo awk e no pode ser controlada ou alterada. possvel remover um elemento individual de um array usando o comando delete: delete nome_array[ndice] No exemplo abaixo todos os elementos do array so removidos: for (i in vetor) delete vetor[i] Torna-se importante salientar que remover um elemento diferente de atribuir um valor nulo. Por exemplo: delete vetor[4] if (4 in vetor) print "Esta mensagem nunca sera exibida." vetor[2] = "" if (2 in vetor) print "Esta mensagem sera exibida, apesar de nao ter conteudo."

No um erro remover um elemento que no existe, e todos os elementos podem ser removidos com um nico comando: delete vetor Awk suporta arrays multidimensionais. Neste caso so usados mais do que um ndice separados por vrgula. Tambm possvel testar quando um ndice existe em um array multidimensional usando o mesmo operador in. Exemplo: $ awk '{ if (max_nf < NF) max_nf = NF # NR o nmero de registros de entrada processados # desde o incio da execuo do programa max_nr = NR for (x=1; x<=NF; x++) vector[x, NR] = $x } END { for (x=1; x<=max_nf; x++) { for (y=max_nr; y>=1; --y) printf ("%s", vector[x, y]) printf("\n") } } }' # Dada a entrada: #123456 #234561 #345612 #456123 # O resultado : #4321 #5432 #6543 #1654 #2165 #3216

Funes Built-in
Funes Built-in so funes que esto sempre disponveis para serem chamadas em programas awk. Para cham-las, basta escrever o nome da funo seguida pelos argumentos entre parnteses. Espaos em branco entre o nome da funo e (so ignorados, mas recomenda-se que no seja deixado um espao em branco). Algumas funes Built-in so

apresentadas a seguir.

sqrt(x): retorna a raiz quadrada de x int(x): retorna o nmero inteiro mais prximo de x (trunca). rand(): retorna um nmero randmico entre 0 e 1, mas no inclui 0 e 1. Pode-se obter nmeros inteiros randmicos da seguinte maneira: function randint(n) { return int(n* rand()) } index(in, find): procura na string "in" a primeira ocorrncia da string "find" e retorna a posio onde foi encontrada dentro da string "in". Exemplo: $ awk 'BEGIN { print index("peanut", "an") }' 3 length(): retorna o nmero de caracteres da string. split(string, array[, fieldsep]): divide a string em partes separadas por fieldsep, e armazena as partes no array. O valor de fieldsep uma expresso regular que descreve onde dividir a string. Se o valor de fieldsep omitido, o valor de FS usado. FS o campo de entrada separador. Se o seu valor for a string nula (""), ento cada caracter torna-se um campo separador. O default " ". split retorna o nmero de elementos criados. Exemplo: split ("cul-de-sac", a, "-") A funo retorna 3 e o array ter o seguinte contedo: a[1] = "cul" a[2] = "de" a[3] = "sac" tolower(string): retorna uma cpia da string com todos os caracteres minsculos. toupper(string): retorna uma cpia da string com todos os caracteres maisculos.

Arquivos para teste: texto.txt texto2.txt texto3.txt texto4.txt LISTA1.TXT LISTA2.TXT

Comentrios, dvidas, sugestes, envie um mail para manssour@inf.pucrs.br.

[Faculdade de Informtica] [Homepage] [PUCRS]


ltima alterao em 20 de maio de 2001.

Vous aimerez peut-être aussi