Comment fusionner deux fichiers ligne par ligne dans Bash


178

J'ai deux fichiers texte, chacun d'eux contient une information par ligne comme ça

file1.txt            file2.txt
----------           ---------
linef11              linef21
linef12              linef22
linef13              linef23
 .                    .
 .                    .
 .                    .

Je voudrais fusionner ces fichiers lignes par lignes en utilisant un script bash afin d'obtenir:

fileresult.txt
--------------
linef11     linef21
linef12     linef22
linef13     linef23
 .           .
 .           .
 .           .

Comment cela peut-il être fait dans Bash?

Réponses:


272

Vous pouvez utiliser paste:

paste file1.txt file2.txt > fileresults.txt

Comment ça marche si je souhaite utiliser un délimiteur?
Teja

8
@SOaddictpaste -d "\n" * > results.txt
Ostap Maliuvanchuk

pasteséparera chaque colonne avec un onglet à moins que vous substituez avec l' -doption de sorte que vous pouvez utiliser quelque chose comme awk, sed, etc ... pour mettre en forme chaque ligne. Exemple: paste file1.txt file2.txt | awk '{printf "%-61s | %s\n", $1,$2}'... cela imite la diff --side-by-sidesortie)
Yzmir Ramirez

Très bonne réponse. Utilisez l'outil fait pour le travail!
Tony

4
paste -d ""pour concaténer des lignes sans délimiteurs, espace
Victoria Stuart

20

voici les méthodes sans coller

awk

awk 'BEGIN {OFS=" "}{
  getline line < "file2"
  print $0,line
} ' file1

Frapper

exec 6<"file2"
while read -r line
do
    read -r f2line <&6
    echo "${line}${f2line}"
done <"file1"
exec 6<&-

11

Essayez de suivre.

pr -tmJ a.txt b.txt > c.txt

1
Utilisez également l'option -s si vous souhaitez modifier le séparateur. (+1)
user.friendly

l'option J ne fonctionne pas sur macOS Mojave mais votre commande fonctionne parfaitement. Merci.
Duck

8

Vérifier

man paste

possible suivi d'une commande comme untabifyoutabs2spaces


Mx replace-string dans Emacs supprimera les onglets, vraisemblablement Vim et peut-être d'autres éditeurs de texte peuvent le faire aussi.
Ben

7
utilisez l'option -d pour spécifier un séparateur autre que tab
Pedru
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.