Filtros p/ processamento de texto em linux - Parte 2

Segundo artigo da série sobre filtros de processamento de texto para linux.

As ferramentas

As ferramentas usadas para manipulação de streams de texto no linux fazem parte de um pacote chamado GNU textutils,
que agora faz parte do pacote GNU coreutils, com excessão do xargs que faz parte de findutils
e do sed, que faz parte de um pacote separado.

Neste artigo vou abordar as seguintes ferramentas:

nl

Numera as linhas de um ou mais arquivos, concatenando-os na saída. Pode ser usada uma marcação especial
para delimitação de cabeçalho, corpo e rodapé. Cabeçalho e rodapé são por padrão excluidos da numeração.

A numeração é feita para cada página lógica, definida por ter um
cabeçalho, um corpo e um rodapé.

A marcação especial é a seguinte:

  • \:\:\: para o cabeçalho
  • \:\: para o corpo
  • \: para o rodapé

Sintaxe:

nl [opções] [arquivos]

Opções mais usadas:

-b estilo
Define o estilo de numeração do corpo. O padrão é t
-f estilo
Define o estilo de numeração do rodapé. O padrão é n
-h estilo
Define o estilo de numeração do cabeçalho. O padrão é n

estilos que podem ser usados:

a
Numera todas as linhas
t
Numera apenas as linhas não vazias
n
Não numerar as linhas
pREGEX
Numera apenas as linhas que casa com a expressão regular REGEX

Exemplo:

Vamos supor o seguinte arquivo1

\:\:\:
Cabeçalho
\:\:
linha1
linha2
\:
rodapé
\:\:\:
Cabeçalho
\:\:
linha1
linha2
\:
rodapé

Usando o comando:

nl arquivo1

Obtemos o seguinte resultado:

Cabeçalho

         1 linha1
         2 linha2

rodapé

Cabeçalho

         1 linha1
         2 linha2

rodapé

paste

Escreve linhas sequencialmente correspondentes de cada arquivo, separadas por tab por padrão, em colunas
verticais.

Sintaxe:

paste [opções] arquivos

Opções mais usadas:

-d‘n’
Usa o caractere n, ao invés de tab para separar as colunas.
-s
Escreve as linhas do arquivo em uma única linha. Se mais de um arquivo for especificado, escreve uma linha para cada
arquivo.

Exemplos:

Considere o arquivo1:

linux
freebsd
macosx
ruindous

E o seguinte arquivo2:

2.6.8.1
5.3
10.4
XPSP2

Usando o comando:

paste arquivo1 arquivo2

Obtemos:

linux          2.6.8.1
freebsd        5.3
macosx         10.4
ruindous       XPSP2

paste -s arquivo1 arquivo2

linux   freebsd macosx ruindous
2.6.8.1 5.3     10.4   XPSP2

paste -d'-' arquivo1 arquivo2

linux-2.6.8.1
freebsd-5.3
macosx-10.4
ruindous-XPSP2

pr

Converte um arquivo de texto em uma versão paginada, com cabeçalhos (contendo o nome do arquivo, data e hora e número de
página). Pode ser bem útil para preparar arquivos texto para impressão. O número de linhas padrão de cada página é 66.

Sintaxe:

pr [opções] [arquivo]

Opções mais usadas:

-d
Duplo espaço entre linhas
-h cabeçalho
usa cabeçalho ao invés do nome do arquivo no cabeçalho de cada página
-l linhas
Define o número de linhas de cada página. O padrão é 66
-o largura
Define a margem esquerda para largura colunas

split

Quebra um arquivo em uma sucessão de arquivos arquivoaa, arquivoab, arquivoac, etc.
O padrão de saída é xaa, xab, xac…

O arquivo original permanece inalterado

Sintaxe:

split [opções] [arquivo de entrada] [arquivo de saída]

Opções mais usadas:

-n
Quebra o arquivo em arquivos com n linhas. O número padrão de linhas é 1000

Exemplo

Suponha o seguinte arquivo:

1 um
2 dois
3 três
4 quatro
5 cinco
6 seis

Usando o comando

split -2 arquivo saida

Obtêm-se os seguintes arquivos: saidaaa, saidaab e saidaac

saidaaa:

1 um
2 dois

saidaab:

3 três
4 quatro

saidaac:

5 cinco
6 seis

tac

É o oposto do comando cat, que simplesmente exibe o conteudo de arquivos na saída padrão, concatenando múltiplos arquivos.

tac exibe o conteúdo de arquivos na saída padrão na ordem inversa, concatenando também, múltiplos arquivos

Sintaxe:

tac [arquivos]

Exemplo:

Suponha o arquivo1:

1 um
2 dois

e arquivo2:

3 três
4 quatro

Usando

tac arquivo1 arquivo2

Obtem-se:

2 dois
1 um
4 quatro
3 três

tail

Exibe as últimas linhas de um arquivo. Faz o contrário de head. Se mais
de um arquivo for especificado, exibe as últimas linhas de cada um, com um cabeçalho de identificação.

Sintaxe:

tail [opções] [arquivos]

Opções mais usadas:

-c n
Exibe os últimos n bytes do arquivo. Pode-se usar os sufixos k ou m, significando
kbytes ou megabytes, respectivamente
-n m
Exibe as últimas m linhas do arquivo. O padrão são 10 linhas.
-f
Exibe continuamente o arquivo enquanto ele é escrito por outro proxesso, exibindo as novas linhas que são adicionadas
a ele. É muito útil para acompanhar a atividade do sistema, visualizando arquivos de log enquanto eles são escritos

tr

Traduz caracteres de string1 para caracteres correspondentes em string2. string2 não é um
argumento mandatório. No caso de usar apenas string1, deve-se especificar uma opção para o tratamento destes
caracteres.

Você pode especificar intervalos (a-z por exemplo). Nesse caso, o intervalo usado em string1 deve conter o mesmo
número de caracteres do intervalo em string2.

O comando tr não tem um argumento arquivo. Dessa forma, a entrada padrão deve ser usada.

Sintaxe:

tr [opções] [string1 [string2]]

Opções mais usadas:

-d
deleta os caracteres em string1 da saída
-s
Remove caracteres repetidos contidos em string1 da saída

Exemplos:

Para transformar todas as letras minúsculas para maiúsculas em arquivo

cat arquivo | tr a-z A-Z

ou

tr a-z A-Z < arquivo

Para remover os caracteres ‘a’ repetidos de arquivo

cat arquivo | tr -s a

Leia também:

1 Comentários sobre “Filtros p/ processamento de texto em linux - Parte 2”

Faça um comentário

#1 | Daniel Dantas

O artigo é muito bom.

Só para completar, para converter os caracteres minúsculos em maiúsculos, pode-se usar assim também:

tr [:lower:] [:upper:] < arquivo

Qual o melhor??? Fica a gosto do freguês.


Deixe seu comentário

Buscas populares: Ganhar dinheiro, AdSense, Velox, Acessibilidade, IE7, CSS Position, Quero ganhar dinheiro