[Unix] char chain

Fermé
nono - 19 févr. 2007 à 09:01
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 21 févr. 2007 à 15:35
Hi all,

Je viens de passer ma nuit à chercher comment gérer les chaines de caractères en bash, ça commence à me sortir par les yeux, je m'adresse donc à vous ;)

disons que j'ai :
t="001.023.103.120"

Là dedans, je veux faire quelque chose qui va me supprimer les 0 inutile dans cette ip.

Au final je veux avoir :
t="1.23.103.120"

Je pourrais le faire à la main c'est vrai, sauf que le fichier fait quelques 45 Mo donc bon ^^
J'ai essayé awk sans grande réussite je l'avoue.

Voilà merci pr l'aide ;)

10 réponses

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 567
19 févr. 2007 à 11:07
Salut,

essaie avec
perl -pi.orig -e 's/(t=\")0+(\..*)/$1$2/' fichier 
0
arnaud@unix-powa:~/Desktop$ perl -pi.orig -e 's/(t=\")0+(\..*)/$1$2/' a
arnaud@unix-powa:~/Desktop$ cat a
000.000.000.000
003.255.255.255
004.000.025.146

nothing ^-_-^
0
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 567
19 févr. 2007 à 11:42
C'est normal, tu as dit

disons que j'ai :
t="001.023.103.120"


par exemple il faut supprimer tout si on a 000.000.000.000 ?
0
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 567
19 févr. 2007 à 11:51
on peut avoir par exemple
000.000.000.111
000.000.111....

?

donc il faut traiter plusieurs cas?

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
en fait, j'me suis décidé à le coder en C, et d'un coup ça va plus vite ..
bon c fait en 5min hein ^-_-^
merci qd même pr l'aide


#include <stdio.h>

int main(void)
{
char filename[10];
int n,readend;
FILE * input;
printf("nom du file : ");
scanf("%9s",filename);
input=fopen(filename,"r");
int i=1,j=2;
do
{
readend=fscanf(input,"%d",&n);
if (readend==1)
{
if (i==4)
{
if (j!=2)
{
printf("%d\n",n);
j++;
} else {
printf("%d-",n);
j=1;
}
i=0;
} else {
printf("%d.",n);
}
}
i++;
}
while (readend==1 && fgetc(input)!=EOF);
fclose(input);
}
0
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 567
19 févr. 2007 à 12:09
Très bien :-))
Il fait combien de lignes ton fichier de 45 Mo?
0
à peut près 1 millions
0
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 567
19 févr. 2007 à 13:02
veux tu compresser ton fichier et le mettre sur cjoint.com?
Merci.
0
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 567
19 févr. 2007 à 20:22
j'me suis décidé à le coder en C, et d'un coup ça va plus vite .

je voulais voir ton fichier puisque 5 minutes me semble beaucoup
ici fichiers texte en perl#2007 02 19%2020%3A15%3A18 je traite 2 fichiers (chaque de 2 millions lignes) en 13 secondes
0
salut,

désolé je viens de voir ton post
je disais "5min" pour coder le script lol, pas pour le traiter ;)

au niveau du fichier, ce sont des bad ip provenant de http://www.bluetack.info/nipfilter.dat.gz ainsi qu'une liste de bad sites (j'ai plus le site en tête là), une liste d'ip locales, etc ..
0
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 567
21 févr. 2007 à 15:35
Ah, d'accord.
Je préfère quand même les regex quand il s'agit de traitement de chaînes de caractères :-))

bonne continuation
0