Assine a Lista Dicas-L
Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.
Vi e Awk
Colaboração: Marcelo Pereira
Data de Publicação: 04 de Outubro de 2001
Ao editar arquivos texto, especialmente aqueles de configuração, às vezes nos deparamos com a necessidade de inserir caracteres no início de várias linhas, na maior parte das vezes isso acontece quando precisamos comentar um bloco inteiro de código, e isso faz com que tenhamos o trabalho de inserir um a um os caracteres que precisamos.
Utilizando as ferramentas disponíveis nas distribuições Linux/Unix/FreeBSD é possível agilizar não apenas este processo, mas inúmeros outros que possam surgir. Este é o caso do cat, sed, grep, awk, tail, head, cut, sort, entre outros.
A dica a seguir utiliza o awk para comentar blocos de texto, utilizando o editor de textos vi.
Para comentar algumas linhas:
:li,lf ! awk '{ print "\# " $0 }'
Onde:
li - Linha Inicial; lf - Linha Final; $0 - Indica 'toda' a linha.
Para li e lf, pode-se utilizar:
- um valor absoluto; - um 'ponto', para indicar a linha 'atual'; - '-n' para indicar as n linhas anteriores a linha atual; - '+n' para indicar as n linhas a partir da atual;
Exemplos:
Inserir a letra 'a' nas linhas 7,8,9,10,11,...,84:
:7,84 ! awk '{ print "a" $0 }'
Inserir o caractere '#' nas 10 linhas a partir da linha atual:
:.,+10 ! awk '{ print "\# " $0 }'
Inserir o caractere '#' nas 10 linhas anteriores a linha atual:
:-10,. ! awk '{ print "\# " $0 }'
Note que alguns caracteres precisam ser cotados.
Para comentar todas as linhas de um arquivo:
% cat file.txt | awk '{ print "# " $0 }' > file.txt.out
A utilização de $0 é feita no caso do script precisar incluir um caracter no início ou no final da linha, não sendo necessário alterar nenhum valor. No entanto, $0 indica 'todas as colunas' da linha, e estas colunas podem ser referencidas com $1 (coluna 1), $2 (coluna 2), $3 (coluna 3), $n (coluna n).
Exemplo, utilizando o ls:
Pega a lista dos arquivos de um diretório, ordena pelo tamanho em ordem crescente, seleciona as colunas 1, 5 e 9 (permissão, tamanho e nome) e exibe as 10 últimas linhas, ou seja, os 10 maiores arquivos. (pode parecer um exemplo ingênuo, mas é possível incrementá-lo para adequá-lo às necessidades de cada usuário.
% ls -la | sort +4n | awk '{ print $1 " " $5 " " $9 }' | tail -n10
Com isso é possivel construir script bastante complexos, utilizando as ferramentas disponíveis na maior parte das distribuições espalhadas por aí.
Referências Adicionais
Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.



