GNU/Linux >> Znalost Linux >  >> Linux

Sloučit dva soubory řádek po řádku s oddělovacím symbolem trojité trubky „|||“?

Mám dva paralelní soubory se stejným počtem řádků ve dvou jazycích a plánuji tyto dva soubory sloučit řádek po řádku s oddělovačem ||| . Např. dva soubory jsou následující:

Soubor 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.

Soubor 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.

Očekávaný výstup je takovýto:

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.

Zkusil jsem paste příkaz jako:

paste -d "|||" fileA fileB

Ale vrácený výstup obsahuje pouze jeden kanál, například:

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

Existuje nějaký způsob, jak oddělit každou dvojici linek pomocí dršťkové trubky ||| ?

Přijatá odpověď:

S pastou POSIX:

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

paste zřetězí odpovídající řádky všech vstupních souborů. Zde máme šest souborů, fileA , čtyři fiktivní soubory ze standardu v - a fileB .

Seznam oddělovačů obsahuje mezeru, tři čáry a mezeru v tomto pořadí použije paste kruhově.

Pro první řádek ze šesti souborů fileA bude zřetězen s prvním fiktivním souborem (což není nic, díky operátoru no-op :), vytvoří line1-fileA<space> .

První fiktivní soubor bude zřetězen s druhým rourou, vznikne line1-fileA | , pak druhý fiktivní soubor s třetím fiktivním souborem, vytvořte line1-fileA || , třetí fiktivní soubor se čtvrtým fiktivním souborem, vytvoří line1-fileA ||| .

A čtvrtý fiktivní soubor s fileB , vytvořte line1-fileA ||| line1-fileB .

Tento krok se bude opakovat pro všechny řádky, čímž získáte očekávaný výsledek.

Použití :| je pro méně psaní a používá se hlavně v interaktivním prostředí. Ve skriptu byste měli použít:

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

aby se zabránilo vytvoření podslupky.


Linux
  1. Tisknout dva soubory ve dvou sloupcích?

  2. Počítání znaků každého řádku s Wc?

  3. Ručně sloučit dva soubory pomocí diff

  1. Seřadit pomocí řazení na příkazovém řádku

  2. Sloučit dva soubory HTML do hlavního souboru HTML

  3. Sloučit soubory pdf s číselným řazením

  1. Manipulace s textem na příkazovém řádku pomocí sed

  2. Multi-tasking na příkazovém řádku s screenie

  3. Potrubí k více souborům ve skořápce?