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?

semteu
la source

Réponses:

272

Vous pouvez utiliser paste:

paste file1.txt file2.txt > fileresults.txt
Mark Byers
la source
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<&-
ghostdog74
la source
11

Essayez de suivre.

pr -tmJ a.txt b.txt > c.txt
vtha
la source
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

Christopher Creutzig
la source
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