você está aqui: Home  → Arquivo de Mensagens

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í.



 

 

Veja a relação completa dos artigos de Marcelo Pereira

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script