GNU/Linux >> Tutoriels Linux >  >> Linux

Fusionner deux fichiers ligne par ligne avec le symbole délimiteur Triple Pipe "|||" ?

J'ai deux fichiers parallèles avec le même nombre de lignes dans deux langues et je prévois de fusionner ces deux fichiers ligne par ligne avec le délimiteur ||| . Par exemple, les deux fichiers sont les suivants :

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

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

La sortie attendue ressemble à ceci :

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.

J'ai essayé le paste commande telle que :

paste -d "|||" fileA fileB

Mais la sortie renvoyée ne contient qu'un seul tube tel que :

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

Existe-t-il un moyen de séparer chaque paire de lignes par tripe pipe ||| ?

Réponse acceptée :

Avec le collage POSIX :

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

paste concaténera les lignes correspondantes de tous les fichiers d'entrée. Ici, nous avons six fichiers, fileA , quatre fichiers factices du standard en - , et fileB .

La liste des délimiteurs comprend un espace, trois tubes et un espace dans cet ordre sera utilisé par paste circulairement.

Pour la première ligne de six fichiers, fileA sera concaténé avec le premier fichier factice (qui n'est rien, grâce à l'opérateur no-op :), produire line1-fileA<space> .

Le premier fichier factice sera concaténé avec le second par un tube, produire line1-fileA | , puis le deuxième fichier factice avec le troisième fichier factice, produisent line1-fileA || , le troisième fichier factice avec le quatrième fichier factice, produit line1-fileA ||| .

Et le quatrième fichier factice avec fileB , produit line1-fileA ||| line1-fileB .

Ces étapes seront répétées pour toutes les lignes, vous donneront le résultat attendu.

L'utilisation de :| est pour moins de saisie et principalement utilisé dans un shell interactif. Dans un script, vous devez utiliser :

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

pour empêcher un sous-shell d'être généré.


Linux
  1. Manipulation de texte en ligne de commande avec sed

  2. Imprimer deux fichiers sur deux colonnes ?

  3. Compter les caractères de chaque ligne avec Wc ?

  4. Canaliser vers plusieurs fichiers dans le shell ?

  5. Fusionner manuellement deux fichiers à l'aide de diff

Conseils pour lister les fichiers avec ls sur la ligne de commande Linux

Manipuler du texte en ligne de commande avec grep

Suivi du temps avec Timewarrior en ligne de commande

Comment rechercher des fichiers avec la commande fd sous Linux

Un moyen facile de fusionner des fichiers avec la commande Cat

Copier des fichiers en toute sécurité avec la commande SCP