2010-01-29 6 views
0

J'ai un fichier texte et les 2 dernières lignes ressemble à ça ...calculer la différence de fichier plat

Uptime: 822832 Threads: 32 Questions: 13591705 Slow queries: 722 Opens: 81551 Flush tables: 59 Open tables: 64 Queries per second avg: 16.518 
Uptime: 822893 Threads: 31 Questions: 13592768 Slow queries: 732 Opens: 81551 Flush tables: 59 Open tables: 64 Queries per second avg: 16.618 

Comment puis-je trouver la différence entre les deux valeurs de chaque paramètre? Le résultat attendu est:

61 -1 1063 10 0 0 0 0.1 

En d'autres termes, je tiens à déduire la valeur de disponibilité actuelle de la disponibilité plus tôt. Trouvez la différence entre les discussions et les questions, etc.

Le but de cet exercice est de regarder ce fichier et d'alerter l'utilisateur lorsque la différence est trop élevée. Par exemple si les requêtes lentes sont plus de 500 ou le paramètre « Questions » est trop faible (< 100)

(Il est le statut MySQL, mais n'a rien à voir avec elle, étiquette pour que mysql ne s'applique pas)

Répondre

0

voici un moyen. tail est utilisé pour obtenir les 2 dernières lignes, particulièrement utile en termes d'efficacité si vous avez un gros fichier.

tail -2 file | awk ' 
{ 
gsub(/[a-zA-Z: ]+/," ") 
m=split($0,a," ") 
if (f) { 
    for (i=1;i<=m;i++){ 
     print -(b[i]-a[i]) 
    } 
    # to check for Questions, slow queries etc 
    if ( -(b[3]-a[3]) < 100){ 
     print "Questions parameter too low" 
    }else if (-(b[4]-a[4]) > 500){ 
     print "Slow queries more than 500" 
    }else if (a[1] - b[1] < 0){ 
     print "mysql ...... " 
    } 
    exit 
} 
for(i=1;i<=m;i++){ b[i]=a[i] ;f=1 } 
} ' 

sortie

$ ./shell.sh 
61 
-1 
1063 
10 
0 
0 
0 
0.1 
+0

J'aimerai ajouter un plus si/autre. Si la disponibilité est inférieure à la précédente, affichez le message "service mysql redémarré". Je ne pouvais pas utiliser "curl" dans la clause if. – shantanuo

+0

si la disponibilité est inférieure à la précédente, la valeur sera inférieure à 0. voir le code mis à jour. (NB: faites-le vous-même la prochaine fois). En cas de doute, lisez les documents awk. – ghostdog74

+0

J'ai réussi à obtenir les valeurs en utilisant la méthode proposée par Ramashalanka. Merci a tous. – shantanuo

0

gawk:

BEGIN { 
    arr[1] = "0" 
} 
length(arr) > 1 { 
    print $2-arr[1], $4-arr[2], $6-arr[3], $9-arr[4], $11-arr[5], $14-arr[6], $17-arr[7], $22-arr[8] 
} 
{ 
    arr[1] = $2 
    arr[2] = $4 
    arr[3] = $6 
    arr[4] = $9 
    arr[5] = $11 
    arr[6] = $14 
    arr[7] = $17 
    arr[8] = $22 
} 
1

Juste une légère variation sur des années ghostdog74 (original) réponse:

tail -2 file | awk ' { 
    gsub(/[a-zA-Z: ]+/," ") 
    m=split($0,a," "); 
    for (i=1;i<=m;i++) 
    if (NR==1) b[i]=a[i]; else print a[i] - b[i] 
} ' 
Questions connexes