GNU/Linux >> Linux Esercitazione >  >> Linux

Unisci due file riga per riga con il simbolo del tubo triplo delimitatore "|||"?

Ho due file paralleli con lo stesso numero di righe in due lingue e ho intenzione di unire questi due file riga per riga con il delimitatore ||| . Ad esempio, i due file sono i seguenti:

File A:

1Mo 1,1 I love you.
1Mo 1,2 I like you.
Hi 1,3 I am hungry.
Hi 1,4 I am foolish.

File B:

1Mo 1,1 Ich liebe dich.
1Mo 1,2 Ich mag dich.
Hi 1,3 Ich habe Durst.
Hi 1,4 Ich bin neu.

L'output previsto è questo:

1Mo 1,1 I love you. ||| 1Mo 1,1 Ich liebe dich.
1Mo 1,2 I like you. ||| 1Mo 1,2 Ich mag dich.
Hi 1,3 I am hungry. ||| Hi 1,3 Ich habe Durst.
Hi 1,4 I am foolish. ||| Hi 1,4 Ich bin neu.

Ho provato a paste comando come:

paste -d "|||" fileA fileB

Ma l'output restituito contiene solo una pipe come:

1Mo 1,1 I love you. |1Mo 1,1 Ich liebe dich.
1Mo 1,2 I like you. |1Mo 1,2 Ich mag dich.
 

C'è un modo per separare ogni coppia di linee con una trippa ||| ?

Risposta accettata:

Con pasta POSIX:

:|paste -d ' ||| ' fileA - - - - fileB

paste concatenerà le righe corrispondenti di tutti i file di input. Qui abbiamo sei file, fileA , quattro file fittizi dallo standard in - e fileB .

L'elenco dei delimitatori include uno spazio, tre pipe e uno spazio nell'ordine che verrà utilizzato da paste circolarmente.

Per la prima riga di sei file, fileA verrà concatenato con il primo file fittizio (che non è nulla, grazie all'operatore no-op :), produrrà line1-fileA<space> .

Il primo file fittizio sarà concatenato con il secondo da una pipe, produrrà line1-fileA | , quindi il secondo file fittizio con il terzo file fittizio, producono line1-fileA || , il terzo file fittizio con il quarto file fittizio, produce line1-fileA ||| .

E il quarto file fittizio con fileB , produrre line1-fileA ||| line1-fileB .

Questi passaggi verranno ripetuti per tutte le righe, dandoti il ​​risultato atteso.

L'uso di :| è per la digitazione ridotta e viene utilizzato principalmente nella shell interattiva. In uno script, dovresti usare:

</dev/null paste -d ' ||| ' fileA - - - - fileB

per impedire la generazione di una subshell.


Linux
  1. Ordina con l'ordinamento dalla riga di comando

  2. Multitasking alla riga di comando con screenie

  3. Unisci manualmente due file usando diff

  4. Unisci due file HTML nel file HTML principale

  5. Unisci file pdf con ordinamento numerico

Suggerimenti per elencare i file con ls nella riga di comando di Linux

Manipolazione del testo dalla riga di comando con grep

Tracciare il tempo con Timewarrior alla riga di comando

Come trovare file con il comando fd in Linux

Un modo semplice per unire i file con il comando Cat

Copia i file in modo sicuro con il comando SCP