comando colar: definindo delimitadores (múltiplos)

9

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

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

Pergunta : Como se define (vários) delimitadores ao usar paste ?

Simplesmente usar, por exemplo, abc-123 como delimitador, seria bom. Com "múltiplo", quero dizer, por exemplo, 2 TABS em vez de um.


Os padrões que envolvem o (s) delimitador (es) 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="\0" → nada entre
  • --delimiters="\t"TAB, o padrão. Ótimo.
erch
fonte

Respostas:

17

Para ter abcentre file1 e file2, você pode:

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

Ou:

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

Se você deseja duas guias:

paste file1 /dev/null file2
Stéphane Chazelas
fonte
" Usando /dev/nullpara criar duas colunas em processamento de texto " obras (além: é este conhecimento comum que eu perdi até agora e se não: de onde você tirou essa informação?)
erch
1
@ Chirp.NotLuke. /dev/nullage como um arquivo vazio ao ler, então você está colando file1, e arquivo vazio e arquivo vazio, arquivo2 com separadores sendo, por sua vez a, be c. Detalhes sobre como os -dtrabalhos estão na pastepágina de manual.
Stéphane Chazelas
@ StéphaneChazelas você também pode adicionar pr -mts'abc' file1 file2como alternativa?
Sundeep 4/17/17
4

É porque você está dando apenas dois arquivos para ingressar, cada caractere da cadeia de caracteres delimitador é 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 ...
...
X Tian
fonte
2

Nos sistemas BSD (não é do meu conhecimento o Linux), existe o lamutilitário (como em "laminado"), que é mais rápido e mais curto que a solução acima:

lam file1 -s delimiter file2
emm
fonte