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


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.