Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/03/2018, à 11:12

TheFrog21

Remplacement caractères à partir d'un autre fichier

Bonjour à tous,

J'ai un fichier A de base de 160 caractères/ligne, j'aimerais remplacer certains caractères en fonction de leur position, je m'explique:

Fichier A:

000000000000000000000000000000AAA AAAAAA AAA AAAA     0000000000000000                00000000000000000000000000000000000000 AAAAAAA                 00000  000 
000000000000000000000000000000AAA AAAAAA AAA AAAA     0000000000000000                00000000000000000000000000000000000000 AAAAAAA                 00000  000 
000000000000000000000000000000AAA AAAAAA AAA AAAA     0000000000000000                00000000000000000000000000000000000000 AAAAAAA                 00000  000 
000000000000000000000000000000AAA AAAAAA AAA AAAA     0000000000000000                00000000000000000000000000000000000000 AAAAAAA                 00000  000 
000000000000000000000000000000AAA AAAAAA AAA AAAA     0000000000000000                00000000000000000000000000000000000000 AAAAAAA                 00000  000 
000000000000000000000000000000AAA AAAAAA AAA AAAA     0000000000000000                00000000000000000000000000000000000000 AAAAAAA                 00000  000 

Fichier B:

BBB BBBBBBBBBBBBBBBBBBBB
11111111111
111111 BBBBBBBBBBBBBBBBBBBBBBBB

J'aimerais remplacer les caractères:
-De la position 31 à 55 par la première ligne du fichier B
-De la position 92 à 103 par la deuxième ligne du fichier B
-De la position 119 à 150 par la troisième ligne du fichier B


Fichier désiré:

000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB0000000000000000                00000111111111110000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB00000  000 
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB0000000000000000                00000111111111110000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB00000  000 
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB0000000000000000                00000111111111110000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB00000  000 
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB0000000000000000                00000111111111110000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB00000  000 
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB0000000000000000                00000111111111110000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB00000  000 
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB0000000000000000                00000111111111110000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB00000  000 

Je n'arrive pas à trouver une expression régulière avec sed pour répondre à mon besoin, si quelqu'un peut me filer un coup de main.

Merci d'avance.


Modération : merci d'utiliser les balises code (explications ici).

Dernière modification par cqfd93 (Le 15/03/2018, à 11:14)

Hors ligne

#2 Le 15/03/2018, à 13:03

credenhill

Re : Remplacement caractères à partir d'un autre fichier

hello

$ awk 'BEGIN {OFS=""; FIELDWIDTHS="30 24 37 11 16 31 99"} NR==FNR {t[NR]=$0; next} {$2=t[1]; $4=t[2]; $6=t[3]; print}' B A
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB0000000000000000                00000111111111110000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB00000  000 
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB0000000000000000                00000111111111110000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB00000  000 
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB0000000000000000                00000111111111110000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB00000  000 
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB0000000000000000                00000111111111110000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB00000  000 
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB0000000000000000                00000111111111110000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB00000  000 
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB0000000000000000                00000111111111110000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB00000  000 

Dernière modification par credenhill (Le 15/03/2018, à 14:44)

Hors ligne

#3 Le 15/03/2018, à 14:50

pingouinux

Re : Remplacement caractères à partir d'un autre fichier

Bonjour,
Je propose ceci, avec sed, mais les lignes du fichier de sortie sont plus courtes que celles en #1 ou #2, car le nombre de caractères à remplacer est à chaque fois supérieur à la longueur des lignes de B.

$ sed -r "s/^(.{30}).{25}(.{36}).{12}(.{15}).{32}(.*)$/\1$(sed -n 1p B)\2$(sed -n 2p B)\3$(sed -n 3p B)\4/" A
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB000000000000000                0000011111111111000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB0000  000 
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB000000000000000                0000011111111111000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB0000  000 
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB000000000000000                0000011111111111000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB0000  000 
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB000000000000000                0000011111111111000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB0000  000 
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB000000000000000                0000011111111111000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB0000  000 
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB000000000000000                0000011111111111000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB0000  000

Hors ligne

#4 Le 16/03/2018, à 07:43

credenhill

Re : Remplacement caractères à partir d'un autre fichier

$ mapfile -t t <B
$ sed -r "s/^(.{30})(.{24})(.{37})(.{11})(.{16})(.{31})(.*)/\1${t[0]}\3${t[1]}\5${t[2]}\7/" A
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB0000000000000000                00000111111111110000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB00000  000 
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB0000000000000000                00000111111111110000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB00000  000 
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB0000000000000000                00000111111111110000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB00000  000 
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB0000000000000000                00000111111111110000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB00000  000 
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB0000000000000000                00000111111111110000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB00000  000 
000000000000000000000000000000BBB BBBBBBBBBBBBBBBBBBBB0000000000000000                00000111111111110000000000000000111111 BBBBBBBBBBBBBBBBBBBBBBBB00000  000  

Hors ligne

#5 Le 29/03/2018, à 09:25

TheFrog21

Re : Remplacement caractères à partir d'un autre fichier

Merci à tous! Mon problème est résolu.

Hors ligne