Sed : insertion lettre a chaque ligne

Résolu/Fermé
nicdu40 Messages postés 25 Date d'inscription jeudi 18 novembre 2010 Statut Membre Dernière intervention 24 février 2020 - Modifié par nicdu40 le 9/08/2012 à 00:16
nicdu40 Messages postés 25 Date d'inscription jeudi 18 novembre 2010 Statut Membre Dernière intervention 24 février 2020 - 9 août 2012 à 20:43
Bonjour,
alors voila ce que je cherche a faire sans succés:
inserrer chaque lettre du fichier B dans A a un emplacement défini


Fichier A:
ABCDEF

Fichier B:
A
B
C


ce que je cherche a faire:

ABCADEF
ABCBDEF
ABCCDEF


j'ai essayé :
#! /bin/bash

while read line
do
for i in $(sed ':z;N;$! bz;s/\n/ /g' B)
do
echo "${line}${i}"
done
done < A

mais ça me met tout a la fin,
et sed sed 's/^../&C/' par exemple me met le C apres les 2 premiers carracteres mais je n'arrive pas a l'adapter. merci de votre aide

5 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
9 août 2012 à 08:41
Salut,

$ cat A
ABCDEF

$ cat B
A
B
C

$ A=$(<A)

$ sed 's/.*/'"${A:0:3}"'&'"${A:3}"'/' B
ABCADEF
ABCBDEF
ABCCDEF

$
1
Effectivement, j'avais mal lu, je pensais que le fichier A pouvait contenir plusieurs lignes différentes.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
9 août 2012 à 09:36
En fait non, tu n'as pas mal lu, c'est l'énoncé qui est légèrement inversé ;-)
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
9 août 2012 à 14:27
hello
avec awk
$ awk 'FNR==NR{a=$0; next} {print substr(a,1,3) $0 substr(a,4)}' A B 
ABCADEF
ABCBDEF
ABCCDEF
$ 
1
Salut,
je ne comprends pas trop, pourquoi tu fais une 2eme boucle imbriquée dans la première ?
$
0
C'est vrai que c'est pas évident de lire 2 fichiers en même temps en bash, il y a sans doute une commande bien / un enchainement de commandes qui va bien pour le faire, mais que je ne connais pas

J'aurais fait quelque chose de ce genre :

#!/bin/bash

exec 5<A 6<B
position=3

while read -u 5 lineA
do
read -u 6 lineB
echo ${lineA:0:$position}$lineB${lineA:$position}

done

                
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nicdu40 Messages postés 25 Date d'inscription jeudi 18 novembre 2010 Statut Membre Dernière intervention 24 février 2020 1
Modifié par nicdu40 le 9/08/2012 à 20:44
Merci !!!! j'ai utilisé la methode sed ... encore un grand merci , et quelle rapidité!
0