Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Impasse avec awk
Envoyé par: 2rock

Bonjour à tous,

Voilà j'essai de faire un script qui permet de récupérer tout un tas d'informations à propos de sa machine (CPU, RAM, IP, DNS hostname etc.)

Malheureusement je suis bloqué sur la récupération des informations concernant le CPU.

En effet j'aimerais bien que mon script soit valable quelque soit la configuration.

Mon problème vient du fait que j’aimerais bien séparer non pas une ligne avec un séparateur donné mais un bloc.

Je m'explique :

X
X
X

X
X
X

X
X
X

Sur cette exemple j'aimerais pouvoir appliquer un script awk afin qu'il me retourne trois blocs de donné séparés par une ligne vide.

Merci de votre attention.

Poste le Thursday 18 November 2010 12:55:17
Répondre     Citer    
Re: Impasse avec awk
Envoyé par: lilian_h

Bonjour,

Bien en fait il y a plusieurs possibilités, ca dépend de ton besoins (que je n'ai pas tout à fait saisi).

Soit tu fait un sed pour remplacer les ligne vides par le séparateur que tu souhaite :

cat fichier | sed -e s'/^$/<TON_SEPARATEUR>/'

Je ne pense pas que cette solution résolve ton problème, puisque tu obtiendra à nouveau des lignes séparée par quelque chose, et tu chercheras à nouveau à récupérer des blocs...

Donc, je proposerais cette solution là, qui est plus adaptée:

Un script contenant ceci:
#!/usr/bin/ksh

FILE=data.txt
END=$(cat data.txt | wc -l)

i=0

F_LINE=1
for T_LINE in $(grep -n -e '^$' $FILE | sed -e s'/://'g) $(( $END + 1 )) ; do
BLOC=$(tail -n$(( $END - $F_LINE + 1 )) $FILE | head -n$(( $T_LINE - $F_LINE )))

i=$(( $i + 1 ))

echo "Bloc : $i : "
echo "$BLOC"

F_LINE=$(( $T_LINE + 1 ))
done

Tu pourrais compléter ce script pour mettre ton traitement à la place du echo "$BLOC" (en rouge) puisque la variable $BLOC contient 1 bloc d'info

Lilian.

Poste le Thursday 18 November 2010 16:18:47
Répondre     Citer    
Re: Impasse avec awk
Envoyé par: 2rock

Parfait c'est exactement ce que je recherchais.

Entre temps j'avais trouvé une solution aussi. Je sais pas ce qu'elle vaut mais elle m'a dépannée. Je la mets on sait jamais:
#!/bin/bash
i=1
cpt=1
NBPROC=`cat /proc/cpuinfo | grep processor | wc -l`
NBLIG=`cat /proc/cpuinfo | wc -l`
SPLIT=$(($NBLIG/$NBPROC))
if [ -f machine.txt ]; then
    rm machine.txt
fi
cat /proc/cpuinfo > allproc.txt
split -$SPLIT allproc.txt proc

for i in proc*; do
    echo "Processeur : $cpt" >> machine.txt
    MARQUE=`cat $i | grep vendor_id | awk -F ":" '{print $2}'`
    echo "Marque du processeur : $MARQUE" >> machine.txt
    MODEL=`cat $i | grep "model name" | awk -F ":" '{print $2}'`
    echo "Modèle : $MODEL" >> machine.txt
    FREQ=`cat $i | grep "cpu MHz" | awk -F ":" '{print $2}'`
    echo "frequence : $FREQ">> machine.txt
    CACHE=`cat $i | grep "cache size" | awk -F ":" '{print $2}'`
    echo "cache : $CACHE" >> machine.txt
    CORE=`cat $i | grep "cpu cores" | awk -F ":" '{print $2}'`
    echo "cores : $CORE" >> machine.txt
    echo "" >> machine.txt
    cpt=$(($cpt+1))
done

rm allproc.txt proc*

Poste le Thursday 18 November 2010 16:23:25
Répondre     Citer    
Re: Impasse avec awk
Envoyé par: lilian_h

En fait, si je comprends bien, c'est plutôt CE script qui génère ton fichier d'entrée.
Il ne permet par de gérer des blocs dans un fichier.

Mais (je ne sais pas ce que tu en fais) ca vaut peut-être le coup de faire ton traitement dans ce fichier.

Lilian.

Poste le Thursday 18 November 2010 16:31:59
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Impasse avec awk
Un problème avec une commande du shell ? Comment utiliser la crontab ? Vous avez des soucis pour la gestion réseau sous Linux ? Pour vous la gestion des utilisateurs/groupes est du chinois ? Etc... Posez donc vos questions ici.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons