Trie
Résolu
jachtako
Messages postés
22
Date d'inscription
Statut
Membre
Dernière intervention
-
jachtako Messages postés 22 Date d'inscription Statut Membre Dernière intervention -
jachtako Messages postés 22 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
bonjour j'ai écrire ce script pour trier un fichier log mais ce script me prend près de 5h de temps pour parcourir tout le fichier de 755670 lignes voici mon script
#!/bin/bash
fich=/home/christian/pay/access.log
if [ -f $fich ]
then
echo "date debut : $1, date fin : $2"
while read line; do
remoteHost=$(echo $line | cut -d" " -f1-2 | cut -c2-20)
time=$(date -d "$remoteHost" +%s)
dataLength=$(echo $line | cut -d" " -f10 | sed "s/.$//")
if [ $time -lt $1 ] && [ $time -gt $2 ]
then
somme=0
nbrLine=1
((nbrLine+=$dataLength))
(( somme += $ligne ))
fi
done < $fich
echo -e "requettes totales : $nbreLine\t volume total : $somme"
fi
il permet en fait de ressortir la date et le volume de donnée échangé dans le fichier log puis a la fin il fait le total des lignes et la somme des données échangées.
je voudrai savoir sil ya un script qui pourrai parcourir le fichier log plus rapidement.
exemple de ligne log
[2014-04-10 09:57:41] 192.168.206.16:55881 payzen.lyra-labs.fr:443 TLSv1.2(DHE-RSA-AES256-SHA) "POST /vads-payment/exec.card_input.a HTTP/1.1" 200 7460B "- - -" - - - - - -
bonjour j'ai écrire ce script pour trier un fichier log mais ce script me prend près de 5h de temps pour parcourir tout le fichier de 755670 lignes voici mon script
#!/bin/bash
fich=/home/christian/pay/access.log
if [ -f $fich ]
then
echo "date debut : $1, date fin : $2"
while read line; do
remoteHost=$(echo $line | cut -d" " -f1-2 | cut -c2-20)
time=$(date -d "$remoteHost" +%s)
dataLength=$(echo $line | cut -d" " -f10 | sed "s/.$//")
if [ $time -lt $1 ] && [ $time -gt $2 ]
then
somme=0
nbrLine=1
((nbrLine+=$dataLength))
(( somme += $ligne ))
fi
done < $fich
echo -e "requettes totales : $nbreLine\t volume total : $somme"
fi
il permet en fait de ressortir la date et le volume de donnée échangé dans le fichier log puis a la fin il fait le total des lignes et la somme des données échangées.
je voudrai savoir sil ya un script qui pourrai parcourir le fichier log plus rapidement.
exemple de ligne log
[2014-04-10 09:57:41] 192.168.206.16:55881 payzen.lyra-labs.fr:443 TLSv1.2(DHE-RSA-AES256-SHA) "POST /vads-payment/exec.card_input.a HTTP/1.1" 200 7460B "- - -" - - - - - -
A voir également:
- Trie
- Trie excel - Guide
- Trie photo - Guide
- Trie size - Télécharger - Gestion de fichiers
- Il est trié sur la plateforme de départ - Forum Consommation & Internet
- Sur cette page, triez le tableau pour afficher l'état le plus peuplé en premier. dans le tableau trié, quelle est la capitale du 5ᵉ état ? ✓ - Forum C
5 réponses
salut,
trop de commandes externes
trop d'affichages
un parcours du fichier TAF pour chaque ligne lue du fichier access.log inutilement.
trop de commandes externes
trop d'affichages
un parcours du fichier TAF pour chaque ligne lue du fichier access.log inutilement.
je vois mais je viens de modifier mais c'est toujours pas optimiser un amis ma dit de me servir de cette commande que je trouve trop complexe:
pay$ sudo fgrep POST /home/christian/pay/payzen.lyra-labs.fr.access.log | gawk -F ' ' '{split($1,a,"-");split($2,b,":");date=substr(a[1],2)" "a[2]" "a[3]" "b[1]" "b[2]" "substr(b[3],1,2);datesec=(mktime(date));for (i=datesec;i>=(datesec-$NF-1);i--){time[i]++}} END {for (i in time) printf("%s;%d\n",strftime("%Y/%m/%d %H:%M:%S",i),time[i]); }; ' | sort
pay$ sudo fgrep POST /home/christian/pay/payzen.lyra-labs.fr.access.log | gawk -F ' ' '{split($1,a,"-");split($2,b,":");date=substr(a[1],2)" "a[2]" "a[3]" "b[1]" "b[2]" "substr(b[3],1,2);datesec=(mktime(date));for (i=datesec;i>=(datesec-$NF-1);i--){time[i]++}} END {for (i in time) printf("%s;%d\n",strftime("%Y/%m/%d %H:%M:%S",i),time[i]); }; ' | sort
en effet, c'est un peu compliqué pour ce que ça fait, notamment l'emploi de tableaux pour traiter la date.
àmha, ton fichier apache.conf configure incorrectement le access.log : il ne devrait pas y avoir de B ajouter à la taille de paquets. En fait, le B est l'indication du souhait de noter l'absence de contenu par "0" plutôt que par "-".
ensuite, il nous faudrait plus de lignes de ton access.log, ainsi que le résultat que tu veux en obtenir; mais c'est un sujet à part entière : «trie» n'en est pas très explicatif. :(
àmha, ton fichier apache.conf configure incorrectement le access.log : il ne devrait pas y avoir de B ajouter à la taille de paquets. En fait, le B est l'indication du souhait de noter l'absence de contenu par "0" plutôt que par "-".
ensuite, il nous faudrait plus de lignes de ton access.log, ainsi que le résultat que tu veux en obtenir; mais c'est un sujet à part entière : «trie» n'en est pas très explicatif. :(
hello
si j'ai tout compris, ceci devrait aller plus vite
si j'ai tout compris, ceci devrait aller plus vite
$ awk -F "[]]|[[]| " -v t1=$1 -v t2=$2 '{d=$2 " " $3; gsub("[-:]", " ", d); s=mktime(d); if (s<t1 && s>t2){sub(".$", "", $12); t+=$12; ++l}} END {print "requetes totales : ", l, "\tvolume total : ", t}' $fich
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question