Equivalent commande sed pour numerique
Bonjour,
J'ai un fichier sous UNIX qui contient des valeurs numeriques en colonne 4 à 6 :
ABC010
BCD020
CDE041
DEF049
Je cherche une ligne de commande, un peu sur le modèle de sed, qui permettrait d'ajouter 1 (par exemple) à mes valeurs ce qui donnerait sur le fichier exemple :
ABC011
BCD021
CDE042
DEF050
Quelqu'un a-t'il une idée?
Merci d'avance
J'ai un fichier sous UNIX qui contient des valeurs numeriques en colonne 4 à 6 :
ABC010
BCD020
CDE041
DEF049
Je cherche une ligne de commande, un peu sur le modèle de sed, qui permettrait d'ajouter 1 (par exemple) à mes valeurs ce qui donnerait sur le fichier exemple :
ABC011
BCD021
CDE042
DEF050
Quelqu'un a-t'il une idée?
Merci d'avance
A voir également:
- Equivalent commande sed pour numerique
- Invite de commande - Guide
- Télévision numérique - Guide
- Télévision numérique terrestre - Accueil - TV & Vidéo
- Équivalent coco - Accueil - Réseaux sociaux
- Commande terminal mac - Guide
7 réponses
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
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) ;-))
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
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
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