cat file1
foo
ice
two
cat file2
bar
cream
hundred
Sortie désirée:
foobar
icecream
twohundred
file1 et file2 auront toujours le même nombre de lignes dans mon scénario, au cas où cela rendrait les choses plus faciles.
Le bon outil pour ce travail est probablement paste
paste -d '' file1 file2
Voir man paste
pour plus de détails.
Vous pouvez également utiliser la pr
commande:
pr -TmJS"" file1 file2
où
-T
désactive la pagination-mJ
fichiers m erge, J oining lignes complètes-S""
séparez les colonnes avec une chaîne vide Si vous vouliez vraiment le faire en utilisant du shell bash pur (non recommandé), voici ce que je suggérerais:
while IFS= read -u3 -r a && IFS= read -u4 -r b; do
printf '%s%s\n' "$a" "$b"
done 3<file1 4<file2
(N'inclure cela que parce que le sujet a fait des commentaires sur une autre solution proposée de pure-bash.)
Par le biais de manière awk :
getline x<"file2"
lit la ligne entière à partir de file2 et contient la variable x .print $0x
imprime la ligne entière du fichier1 en utilisant$0
alorsx
qui est la ligne enregistrée du fichier2 .la source
paste
est la voie à suivre . Si vous souhaitez vérifier d'autres méthodes, voici unepython
solution:Si vous avez peu de lignes:
Notez que pour un nombre inégal de lignes, celle-ci se terminera à la dernière ligne du fichier qui se termine en premier.
la source
Aussi, avec pure
bash
(notez que cela ignorera totalement les lignes vides):la source
mapfile
pour lire les fichiers dans des tableaux, soit utiliser une boucle while avec deuxread
commandes, lisant chacune de leur fd.array=( $(cmd) )
ouarray=( $var )
. Utilisezmapfile
plutôt.La façon Perl, facile à comprendre:
Commencer avec:
Sortie:
la source