você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

Tudo o que você sempre quis saber sobre o comando paste

Colaboração: Julio Cezar Neves

Data de Publicação: 15 de junho de 2020

Antes da mensagem de hoje, um recadinho rápido. As inscrições para a 9ª turma do curso Programação Shell Linux, com o Prof. Julio Neves, abriram hoje, às 9h. Os 20 primeiros inscritos terão um desconto de 20%. Para obter o desconto, use o código promocional "PAPAIDOSHELL.

»»» SAIBA MAIS SOBRE O CURSO


O paste é um comando pouco usado por sua sintaxe ser pouco conhecida. Vamos brincar com 2 arquivos criados da seguinte forma:

$ seq 10 > inteiros
$ seq 2 2 10 > pares

Para ver o conteúdo dos arquivos criados, vamos usar o paste na sua forma careta:

$ paste inteiros pares
1       2
2       4
3       6
4       8
5       10
6
7
8
9
10

Agora vamos transformar a coluna do pares em linha:

$ paste -s pares
2       4       6       8       10

O separador default é <TAB>, mas isso pode ser alterado com a opção -d. Então para calcular a soma do conteúdo de pares primeiramente faríamos:

$ paste -s -d'+' pares # também poderia ser -sd'+'
2+4+6+8+10

e depois passaríamos esta linha para a calculadora (bc) e então ficaria:

$ paste -s -d'+' pares | bc
30

Assim sendo, para calcular o fatorial do número contido em $Num, basta:

$ seq $Num | paste -sd'*' | bc 

Com o comando paste você também pode montar formatações exóticas como esta a seguir:

$ ls | paste -s -d'\t\t\n'
arq1 arq2 arq3
arq4 arq5 arq6

O que aconteceu foi o seguinte: foi especificado para o comando paste que ele transformaria linhas em colunas (pela opção -s) e que os seus separadores (é...! Ele aceita mais de um, mas somente um após cada coluna criada pelo comando) seriam uma <TAB>, outra <TAB> e um <ENTER>, gerando desta forma a saída tabulada em 3 colunas. Agora que você já entendeu isto, veja como fazer a mesma coisa, porém de forma mais fácil e menos bizarra e tosca, usando o mesmo comando mas com a seguinte sintaxe:

$ ls | paste - - -

arq1 arq2 arq3
arq4 arq5 arq6

E isto acontece porque se ao invés de especificarmos os arquivos colocarmos o sinal de menos (-), o comando paste os substitui pela saída ou entrada padrão conforme o caso. No exemplo anterior os dados foram mandados para a saída padrão (stdout), porque o pipe (|) estava desviando a saída do ls para a entrada padrão (stdin) do paste, mas veja o exemplo a seguir:

$ cat arq1
predisposição
privilegiado
profissional

$ cat arq2
encher
mário
motor

$ cut -c-3 arq1 | paste -d "" - arq2
preencher
primário
promotor

Neste caso, o cut devolveu as três primeiras letras de cada registro de arq1, o paste foi montado para não ter separador (-d"") e receber a entrada padrão (desviada pelo pipe) no traço (-) gerando a saída juntamente com arq2.



Veja a relação completa dos artigos de Julio Cezar Neves