parte II: Comandos Básicos
parte III: Variáveis
parte IV: if e Operadores de Comparação
parte V: Operações Aritméticas e Direcionamento da saída
parte VI: Loops(for & while), Funções e Considerações finais
- Variáveis definidas pelo usuário
Não podem começar variáveis por dígitos, elas são caso sensitivo, não devem ter o mesmo nome das variáveis do AWK nem de outros comandos e não precisam ser inicializadas ou declaradas.Ao usar pela primeira uma variável, ela é tanto uma string vazia(“”) como 0, mas não é muito bom confiar seu script nesses valores iniciais.
AWK é fracamente tipado, ou seja, você pode atribuir um número a uma variável e sem seguida atribuir uma string, por exemplo.
Ex: salvar como caes2.awk
BEGIN { nomecor="%-15s %20s\n"; printf nomecor, "Nome", "Cor\n"}
{ printf nomecor, $1, $2}
Inicialmente definimos o formato da varável 'nomecor', uma string alinha a esquerda e outra a direita.
Depois vamos imprimir as strings “Nome” e “Cor” nesse formato da 'nomecor'
Depois vamos imprimir, mas com os argumentos $1 e $2, aí o awk imprime linha a linha.
Pra rodar: awk -f caes2.awk caes.txt
- Variáveis internas
- FSFS significa "Field Separator" (separador de campo).
é a variável que armazena o(s) caractere(s) separador(es) de campos.
Usamos a flag -F, em exemplo anterior, para o caractere separador fosse a vírgula.
Com a variável FS podemos escolher este caractere.
fs.awk :
BEGIN { FS=”,” }
{ printf “o %s é : %s\n”, $1,$2}
pra executar: awk -f fs.awk caes.txt
Essa variável é particularmente útil pois podemos definir o separador, não precisa ser somente um caractere. É como se você criasse sua própria expressão regular.
Se estivermos usando dados relacionados com valores de dinheiro: 9,99
Nesse caso não é bom usarmos a vírgula como separador, pois estaríamos separando o valor do real dos centavos.
Use espaço mesmo ou #, por exemplo: 1,99#2,99#3,99
A flexibilidade do FS advém do fato de podermos usar expressões regulares para expressar o 'field separator'. Por exemplo:
Para que o FS seja qualquer número de vírgula: FS="[,]+"
Para que o FS seja qualquer número de espaços: FS="[ ]+"
Para que o FS seja qualquer número de vírgula e qualquer número de espaço: FS="[,]+[ ]+"
Façam o teste com 1, 2, 3 e 4 vírgulas e espaços:
echo "1, 2,, 3,,, 4,,,, " | awk 'BEGIN {FS="[,]+[ ]+"} {print $0}'
o echo que sai é o que é 'liberado' pela condição imposta no awk. Teste com $1, $2...
- NR
NR é uma variável que é automaticamente incrementada(em 1) em cada linha, pelo AWK.
Ele sempre contém o número da atual.
Teste-a:
awk '{print “Linha numero “,NR}' caes.txt
Pra aparecer o número total de linhas temos que fazer com que somente a última linha seja impressa, e isso pode ser feito com o comando END:
awk 'END {print “Total de linhas: ”,NR}' caes.txt
(Sim, eu sei que existe o comando 'wc', mas o que vale mais é a criatividade e se virar com o que se sabe)
Vamos usar a NR pra enumerar dados de um arquivo.
Salve como: coluna.awk
BEGIN { coluna=”%-10s %15s\n”;
printf coluna, “Nome”, “Cor\n” }
{ printf “%d. “ coluna, NR, $1, $2 }
rode: awk -f coluna.awk caes.txt
Primeiros definimos a variável coluna, que será usad em todas linhas. Inicialmente a string coluna é imprimida com “Nome Cor”.
Depois, imprimimos o número da linha seguido da string coluna: “%d. “ coluna,
O primeiro argumento, NR, vai pro “%d”, os outros dois, $1 e $2, vão pra variável coluna.
Note que a NR só começa depois do BEGIN.
A seguir, uma tabela-resumo das variáveis internas do AWK, para, caso te interesse, você saber sobre o que pesquisar:
ARGC, ARGV Contém número e o array dos argumentos passados pela linha de comando
CONVFMT Controla a conversão de números para strings
ENVIRON Array associativo com dados do sistema. O índices são os variáveis das variáveis do sistema
FILENAME Contém o nome do arquivo que o awk está lendo
FNR Número da gravação corrente, do arquiv corrente, que é incrementao pra cada linha lida
FS Já vista no artigo
NF Número de campos na linha de entrada atual
NR Já vista no artigo
RS Entrada do separador; a padrão é \n
OFS Saída do separador de campo (NF)
ORS Saída da RS
PROCINFO Array contendo informações do arquivo, como “gid”, “uid”, “pid” e “version”
Estudando por
Beginning Shell Scripting - Eric Foster-Johnson, John C. Welc, Micah Anderson - Wrox
Nenhum comentário:
Postar um comentário