colar o comando: definindo delimitadores (múltiplos)

9

No Linux, tenho o seguinte problema com paste de (GNU coreutils) 8.13:

Tentar definir outro delimitador do que o padrão (TAB) resulta em apenas imprimir o primeiro caractere do delimitador definido ou ignorá-lo perfeitamente.

Pergunta : Como se define delimitadores (múltiplos) ao usar paste ?

Uso simples, por exemplo abc-123 como delimitador seria legal. Com "múltiplo", quero dizer, e. 2 TABS em vez de um.

Os padrões que envolvem o (s) delimitador (s) que eu tentei até agora foram

  • --delimiters="\delimiter"
  • --delimiters='\delimiter'
  • --delimiters=$"\delimiter"
  • --delimiters=$'\delimiter'

Tudo com o mesmo resultado: somente o primeiro caractere é aceito ou perfeitamente ignorado. Eu também tentei a versão curta -d"\" e várias instâncias & ndahs; nada.

Além disso:

  • --delimiters="\" → Mensagem de erro

O que funciona perfeitamente, embora não seja o que eu quero:

  • --delimiters="\n" → nova linha
  • --delimiters="--delimiters="\t"" → nada entre
  • %code% → TAB , o padrão. Ótimo.
por erch 18.02.2014 / 18:12

3 respostas

15

Para ter abc entre arquivo1 e arquivo2, você pode fazer:

paste -d abc file1 /dev/null /dev/null file2

Ou:

paste -d abc file1 - - file2 < /dev/null

Se você quiser duas guias:

paste file1 /dev/null file2
    
por 18.02.2014 / 18:39
4

É porque você está dando apenas dois arquivos para unir, cada caractere da string delimitadora é usado entre cada junção de linhas de cada um dos arquivos de entrada.

por exemplo

file1 line1 DELIMCHAR0 file2 line1 DELIMECHAR1 file3 line1 ...
file1 line2 DELIMCHAR0 file2 line2 DELIMECHAR1 file3 line2 ...
...
    
por 18.02.2014 / 18:23
2

Em sistemas BSD (não são de conhecimento do Linux), existe o utilitário lam (como em “laminate”), que é mais rápido e mais curto do que a solução acima:

lam file1 -s delimiter file2
    
por 20.11.2014 / 01:45