De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


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

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


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