0
votes

Point délimité de l'analyse avec awk

J'ai une sortie à partir d'une commande qui ressemble aux éléments suivants: xxx pré>

la sortie code> awk code> est comme suit: p> xxx Pre>

Ma pensée en ce moment est un peu désordonnée (je ne suis pas awk code> gourou!), alors mon effort à ce jour ressemble jusqu'à présent: p>

sysctl hw.sensors | fgrep temp0 | sed 's/\./_/g' | awk '{FS="="; print "# TYPE "$1" gauge\n"$1" "$2}' | sed -E 's/_[[:digit:]]{1,2}.*$//g' 


0 commentaires

4 Réponses :


2
votes

Cela pourrait être le plus facile pour vous et le plus adaptable: xxx pré>

cela fonctionne de la manière suivante: p>

  1. diviser chaque ligne dans une paire de touches et de valeurs: p> XXX PRE> LI>

  2. divisez la clé dans les sous-parties en fonction du point comme DeliTIMER, stockez les pièces dans le tableau k p>: p> XXX PRE> LI>

  3. divisez la valeur dans les sous-parties en fonction d'un vierge comme délimiteur, sotez les pièces dans le tableau V: P> XXX PRE> LI>

  4. Remontez les parties comme vous aimez: p> XXX PRE> LI> ol>

    Cette méthode est très flexible, car vous pouvez maintenant mettre des conditions sur les pièces pour déterminer la règle de réassemblage: Exemple: P>

    (k[2]=="sensor"){ print k[1]"_"k[2]"{sensor=\042" k[3] "\042 reading=\042"k[4]"\042}",v[1] }
    (k[2]=="dog") { print "This dog is",v[1], "cm long" }
    


0 commentaires

2
votes

Pourriez-vous s'il vous plaît essayer suivi.

awk -F'[.=]' -v s1="\"" '{print $1"_"$2"{"$2"="s1 $3 s1 " reading="s1 $4 s1 "} " $5+0}' Input_file


0 commentaires

2
votes

en utilisant . code> et = code> comme séparateur de champ à l'aide de awk code>, utilisez la colonne 3,4,5 code> xxx pré>

meilleure version lisible forte> p>

hw.sensors.cpu0.temp0=39.00 degC
^    ^       ^    ^    ^  ^
col1 col2   col3 col4 col5 col6


0 commentaires

2
votes

En supposant que les tests pour Temp0 soient vraiment nécessaires et que votre entrée peut contenir plusieurs types de rapports:

sysctl hw.sensors |
awk -F'[.=]' '
    !/temp0/ { next }
    { type = $1 "_" $2 }
    !doneHdr[type]++ { printf "# TYPE %s gauge\n", type }
    { printf "%s{sensor=\"%s\" reading=\"%s\"} %d\n", type, $3, $4, $5 }
'
# TYPE hw_sensors gauge
hw_sensors{sensor="cpu0" reading="temp0"} 39
hw_sensors{sensor="acpitz0" reading="temp0"} 27


0 commentaires