J'ai une sortie à partir d'une commande qui ressemble aux éléments suivants: la sortie code> awk code> est comme suit: p> 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'
4 Réponses :
Cela pourrait être le plus facile pour vous et le plus adaptable: cela fonctionne de la manière suivante: p> diviser chaque ligne dans une paire de touches et de valeurs: p>
divisez la clé dans les sous-parties en fonction du point comme DeliTIMER, stockez les pièces dans le tableau divisez la valeur dans les sous-parties en fonction d'un vierge comme délimiteur, sotez les pièces dans le tableau V: P>
Remontez les parties comme vous aimez: p>
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 p>: 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" }
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
en utilisant . code> et
= code> comme séparateur de champ à l'aide de
awk code>, utilisez la colonne
3,4,5 code> xxx pré>
hw.sensors.cpu0.temp0=39.00 degC
^ ^ ^ ^ ^ ^
col1 col2 col3 col4 col5 col6
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