comando incolla: impostazione (più) delimitatori


9

In Linux, ho il seguente problema con pastefrom (GNU coreutils) 8.13:

Cercare di impostare un altro delimitatore rispetto al TAB predefinito comporta la sola stampa del primo carattere del delimitatore definito o la sua ignorazione perfetta.

Domanda : come si definiscono (più) delimitatori quando si usa paste ?

Usare semplicemente, ad esempio abc-123 come delimitatore sarebbe bello. Con "multiplo" intendo ad esempio 2 TAB invece di uno.


I modelli che racchiudono i delimitatori che ho provato finora erano

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

Tutti con lo stesso risultato: solo il primo personaggio è accettato o ignorato perfettamente. Ho anche provato la versione breve -d"\"e più istanze & ndahs; Niente.

Anche:

  • --delimiters="\\" → Messaggio di errore

Ciò che funziona perfettamente, anche se non quello che voglio:

  • --delimiters="\n" → newline
  • --delimiters="\0" → niente in mezzo
  • --delimiters="\t"TAB, l'impostazione predefinita. Grande.

Risposte:


17

Per avere abctra file1 e file2, puoi fare:

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

O:

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

Se vuoi due schede:

paste file1 /dev/null file2

" utilizzo /dev/nullper creare due colonne nell'elaborazione del testo " funziona (inoltre: questa conoscenza comune mi è sfuggita finora e in caso contrario: da dove hai preso queste informazioni?)
erch,

1
@ Chirp.NotLuke. /dev/nullsi comporta come un file vuoto durante la lettura, quindi stai incollando file1, e file vuoto e file vuoto, file2 con i separatori che sono, a loro volta a, be c. Dettagli su come -dfunzionano le opere nella pastepagina man.
Stéphane Chazelas,

@ StéphaneChazelas puoi anche aggiungere pr -mts'abc' file1 file2come alternativa?
Sundeep

4

È perché gli stai concedendo solo due file da unire, ogni carattere della stringa del delimitatore viene utilizzato tra ogni join di linee da ciascuno dei file di input.

per esempio

file1 line1 DELIMCHAR0 file2 line1 DELIMECHAR1 file3 line1 ...
file1 line2 DELIMCHAR0 file2 line2 DELIMECHAR1 file3 line2 ...
...

2

Sui sistemi BSD (non Linux a mia conoscenza), esiste l' lamutilità (come in "laminato"), che è più veloce e più breve della soluzione sopra:

lam file1 -s delimiter file2
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.