você está aqui: Home → Arquivo de Mensagens
Colaboração: Julio Cezar Neves
Data de Publicação: 15 de junho de 2020
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
.