#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