2010-09-27 11 views
114

J'ai deux fichiers texte, chacun d'eux contient une information par ligne telle comme celleComment fusionner deux fichiers ligne par ligne dans Bash

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

Je voudrais fusionner des fichiers thèses des lignes par des lignes en utilisant un bash script afin d'obtenir:

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

Comment cela peut-il être fait dans Bash?

Répondre

177

Vous pouvez utiliser paste:

paste file1.txt file2.txt > fileresults.txt 
+0

Comment cela fonctionne-t-il si je souhaite utiliser un délimiteur? – Teja

+3

@SOaddict '' 'coller -d" \ n "*> results.txt''' –

+0

' paste' sépare chaque colonne avec une tabulation à moins que vous ne surchargiez avec l'option '-d', ainsi vous pouvez utiliser quelque chose comme' awk', 'sed', etc ... pour formater chaque ligne. Exemple: 'coller fichier1.txt fichier2.txt | awk '{printf "% -61s |% s \ n", $ 1, $ 2}' '... imite la sortie' diff - side-by-side') –

8

Vérifier

man paste 

possible suivie d'une commande comme untabify ou tabs2spaces

+0

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

+6

Utilisez l'option -d pour spécifier un séparateur autre que l'onglet – Pedru

18

voici les méthodes non-coller

awk

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

Bash

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

Essayez de suivre.

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

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

Questions connexes