Equivalent commande sed pour numerique
Fermé
a_p
-
16 janv. 2009 à 17:42
mamiemando Messages postés 33410 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 2 décembre 2024 - 17 janv. 2009 à 01:34
mamiemando Messages postés 33410 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 2 décembre 2024 - 17 janv. 2009 à 01:34
A voir également:
- Equivalent commande sed pour numerique
- Invite de commande - Guide
- Pavé numérique bloqué - Guide
- Commande terminal mac - Guide
- Equivalent coco - Accueil - Réseaux sociaux
- Equivalent wawacity - Accueil - Outils
7 réponses
mamiemando
Messages postés
33410
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
2 décembre 2024
7 808
16 janv. 2009 à 18:25
16 janv. 2009 à 18:25
Je te propose une solution avec ce petit programme en C. Copie colle ceci dans un fichier appelé plop.c :
Puis lance le programme (en supposant que plop.txt soit le fichier d'entrée et plop2.txt le fichier après addition) :
Exemple : plop.txt :
donnera après conversion :
Si tu préfères des caractères hexadécimaux en majuscules change dans le programme C que je t'ai donné les %x par des %X, recompile le programme avec gcc, et relance-le.
Bonne chance
#define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> int main(int argc,char **argv){ FILE *fin,*fout; int x; int ret; if(argc != 3){ fprintf(stderr,"usage: %s filename_in filename_out\n",argv[0]); return 1; } if(!(fin = fopen(argv[1],"r"))){ fprintf(stderr,"can't read %s\n",argv[1]); return 2; } if(!(fout = fopen(argv[2],"w"))){ fclose(fin); fprintf(stderr,"can't write %s\n",argv[2]); return 3; } while((ret = fscanf(fin,"%x\n",&x)) != EOF){ if (ret == 1) fprintf(fout,"%x\n",x+1); else{ fprintf(stderr,"%s invalid file\n",argv[1]); break; } } fclose(fout); fclose(fin); return 0; }Ensuite compile le en tapant :
gcc -W -Wall -o convertir plop.c
Puis lance le programme (en supposant que plop.txt soit le fichier d'entrée et plop2.txt le fichier après addition) :
./convertir plop.txt plop2.txt
Exemple : plop.txt :
1111 A12E 2222
donnera après conversion :
(mando@aldur) (~) $ ./convertir plop.txt plop2.txt 1112 a12f 2223
Si tu préfères des caractères hexadécimaux en majuscules change dans le programme C que je t'ai donné les %x par des %X, recompile le programme avec gcc, et relance-le.
Bonne chance
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
16 janv. 2009 à 18:41
16 janv. 2009 à 18:41
Salut,
Perso j'avais ça :
Si quelqu'un a une idée (n'est-ce pas dubcek) ;-))
Perso j'avais ça :
[tmpfs]$ cat fich ABC010 BCD020 CDE041 DEF049 [tmpfs]$ awk 'n=match($0,/[0-9][0-9]/) { print substr($0,1,(n-1))(substr($0,n,(RLENGTH+1))+1) }' fich ABC11 BCD21 CDE42 DEF50 [tmpfs]$Qui marche bien, à part que ça me sucre les "0" (zéros) ;-(((
Si quelqu'un a une idée (n'est-ce pas dubcek) ;-))
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
16 janv. 2009 à 18:53
16 janv. 2009 à 18:53
Salut,
$ awk 'n=match($0,/[0-9][0-9]$/) { print substr($0,1,(n-1))(substr($0,n,(RLENGTH+1))+1) }' zz ABC011 BCD021 CDE042 DEF050
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
>
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
16 janv. 2009 à 18:56
16 janv. 2009 à 18:56
Merchi lami20j. J'attendais aussi ta solution en PERL, qui je n'en doutais pas serait 10 fois plus simple et courte ;-))
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
16 janv. 2009 à 18:51
16 janv. 2009 à 18:51
Salut,
lami20j@debian:~/trash$ cat zz ABC010 BCD020 CDE041 DEF049 lami20j@debian:~/trash$ perl -ne 's/(\d{2})$/$1+1/e;print' zz ABC011 BCD021 CDE042 DEF050
mamiemando
Messages postés
33410
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
2 décembre 2024
7 808
16 janv. 2009 à 19:02
16 janv. 2009 à 19:02
Sans vouloir être chauvine je crois que je préfère le C, c'est toujours aussi incompréhensible pour moi le perl ^^
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
16 janv. 2009 à 19:52
16 janv. 2009 à 19:52
Re,
Une autre version
Une autre version
lami20j@debian:~/trash$ cat zz ABC010 BCD020 CDE041 DEF049 lami20j@debian:~/trash$ for i in $(cat zz);do echo ${i:0:4}$((${i:4:2} + 1));done ABC011 BCD021 CDE042 DEF050
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
16 janv. 2009 à 20:00
16 janv. 2009 à 20:00
Clap clap clap.
Ben disons que là faut être sûr de la longueur de la chaîne avant quand même ;-))
Ben disons que là faut être sûr de la longueur de la chaîne avant quand même ;-))
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
16 janv. 2009 à 20:12
16 janv. 2009 à 20:12
Re,
qui contient des valeurs numeriques en colonne 4 à 6
(Clap clap clap. ){1,} ;-))
qui contient des valeurs numeriques en colonne 4 à 6
(Clap clap clap. ){1,} ;-))
$ cat zz ABC010AAA BCD020BBB CDE041CCC DEF049DDD $ for i in $(cat zz);do echo ${i:0:4}$((${i:4:2} + 1))${i:6};done ABC011AAA BCD021BBB CDE042CCC DEF050DDD
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
16 janv. 2009 à 20:13
16 janv. 2009 à 20:13
Oups j'avions zapé ce détail ;-[
mamiemando
Messages postés
33410
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
2 décembre 2024
7 808
17 janv. 2009 à 01:34
17 janv. 2009 à 01:34
Moi j'avais plutôt compris qu'il s'agissait de valeurs hexadécimales...