Sequence par deux du fichier

Résolu
mlkndiaye -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

je veux avoir un script shell qui met la sequence des lignes de cette maniere:
fich1:
000000000000000000000000CH5010000000000000000000 201000
000000000000000000000000CA50000000000000000000 201000001
000000000000000000000000CH5001000000000000000000 201000
000000000000000000000000CA50000000000000000000 201000001
000000000000000000000000CH5003000000000000000000 201000
000000000000000000000000CA50000000000000000000 201000001
000000000000000000000000CH5003000000000000000000 201000
000000000000000000000000CA50000000000000000000 201000001
000000000000000000000000CH5003000000000000000000 201000
000000000000000000000000CA50000000000000000000 201000001
...........
...........
je veux que les 24 premiere ligne soit numeroter sequenciellement deux a deux:
fich2:

000000000000000000000001CH5010000000000000000000 201000
000000000000000000000001CA50000000000000000000 201000001
000000000000000000000002CH5001000000000000000000 201000
000000000000000000000002CA50000000000000000000 201000001
000000000000000000000003CH5003000000000000000000 201000
000000000000000000000003CA50000000000000000000 201000001
000000000000000000000004CH5003000000000000000000 201000
000000000000000000000004CA50000000000000000000 201000001
000000000000000000000005CH5003000000000000000000 201000
000000000000000000000005CA50000000000000000000 201000001
...........
...........


A voir également:

4 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Bonjour,

S'il vous plaît, merci, c'est trop demander ???

Je veux => Je voudrai, j'aimerai, etc.

A lire...

Merci.
0
ripat
 
Bonjour,

Avec awk:

awk '{i=i+(NR%2?1:0);print substr($0,1,24) i substr($0,25)}' fichier
0
mlkndiaye
 
Bonjour,

Ca marche mais il y a un decadrage a partir de la 18em ligne,
je rappele que les 24 premieres caracteres sont reservées pour la sequence.

voir ci-dessous
000000000000000000000008CA50000000000000000000 2010000016DDA 01
000000000000000000000009CH5001000000000000000000 2010000016 0
000000000000000000000009CA50000000000000000000 2010000016DDA 01
0000000000000000000000010CH5009000000000000000000 2010000016
0000000000000000000000010CA50000000000000000000 2010000016DDA 0
0000000000000000000000011CH5010000000000000000000 2010000016
0000000000000000000000011CA50000000000000000000 2010000016DDA 0
0000000000000000000000012CH5007000000000000000000 2010000016
0000000000000000000000012CA50000000000000000000 2010000016DDA 0
0000000000000000000000013CH5008000000000000000000 2010000016
0000000000000000000000013CA50000000000000000000 2010000016DDA 1
0000000000000000000000014CH5001000000000000000000 2010000016
0000000000000000000000014CA50000000000000000000 2010000016DDA 0
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
%02d pour moins de 198 lignes, pour plus mettre %03d ou plus
gawk 'BEGIN{FS=OFS=""};{$24=$24 sprintf("%02d", i+=and(NR,1)) ; print}' fichier
0
mlkndiaye
 
ca ne marche pas, je rappelle que je suis sous windows et j'ai installe le mks.
est que la commande gawk peux fonctionner?
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Fais un effort en convertissant tes fichiers ! Voir liens !
0
ripat
 
Joli le coup de l'opérateur binaire!
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
dubcek c'est notre maitre Yoda du awk ;-))
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
essaye
GNU AWK. MKS Toolkit for System Administrators and all higher products feature the GNU AWK utility (gawk). GNU AWK is an alternate version of the awk pattern matching and scripting language used predominantly for searching through and manipulating text-based files and data. gawk has been included to provide compatibility with other GNU tools and ported scripts from a GNU environment.
sinon tu prends le code de ripat et tu changes i par sprintf("%02d", i)
0
mlkndiaye
 
Merci a tous ca marcher.
ca fonctionnée avec sprintf("%02d", i)
Bonne journée a tous.
0