Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I'm trying to setup some basic temperature monitoring on my server - (without using third-party tools).

I've installed a couple of libraries on my linux box to get sensors working on my server, and now I can use the sensors command which might return data like the following:

asb100-i2c-1-2d
Adapter: SMBus nForce2 adapter at 5500
in0:          +1.79 V  (min =  +1.39 V, max =  +2.08 V)
in1:          +1.79 V  (min =  +1.39 V, max =  +2.08 V)
in2:          +3.34 V  (min =  +2.96 V, max =  +3.63 V)
in3:          +2.96 V  (min =  +2.67 V, max =  +3.28 V)
in4:          +3.06 V  (min =  +2.51 V, max =  +3.79 V)
in5:          +3.06 V  (min =  +0.00 V, max =  +0.00 V)
in6:          +3.04 V  (min =  +0.00 V, max =  +0.00 V)
fan1:        6136 RPM  (min = 2777 RPM, div = 2)
fan2:           0 RPM  (min = 3534 RPM, div = 2)
fan3:           0 RPM  (min = 10714 RPM, div = 2)
temp1:        +37.0°C  (high = +80.0°C, hyst = +75.0°C)
temp2:        +26.5°C  (high = +80.0°C, hyst = +75.0°C)
temp3:         -0.5°C  (high = +80.0°C, hyst = +75.0°C)
temp4:        +25.0°C  (high = +80.0°C, hyst = +75.0°C)
cpu0_vid:    +1.750 V

w83l785ts-i2c-1-2e
Adapter: SMBus nForce2 adapter at 5500
temp1:        +30.0°C  (high = +85.0°C)

I then realised I could narrow it down easily by adding | grep temp onto the end of the command, so I tried running sensors | grep temp, and got this:

temp1:        +37.0°C  (high = +80.0°C, hyst = +75.0°C)
temp2:        +26.5°C  (high = +80.0°C, hyst = +75.0°C)
temp3:         -0.5°C  (high = +80.0°C, hyst = +75.0°C)
temp4:        +25.0°C  (high = +80.0°C, hyst = +75.0°C)
temp1:        +30.0°C  (high = +85.0°C)

I realised that temp3 clearly wasn't functioning correctly, so I revised my command to eliminate that result: sensors | grep temp[1,2,4]

temp1:        +36.0°C  (high = +80.0°C, hyst = +75.0°C)
temp2:        +26.5°C  (high = +80.0°C, hyst = +75.0°C)
temp4:        +25.0°C  (high = +80.0°C, hyst = +75.0°C)
temp1:        +30.0°C  (high = +85.0°C)

Now I want to trim it right down, so all I have is a comma-separated string, which might look like this.

+36.0,+26.5,+25.0,+30.0

I can then set this up to submit this data to a server every 5/10 minutes.

How can I achieve this using grep or other commands?

share|improve this question
add comment

1 Answer

up vote 5 down vote accepted

Using awk:

sensors | awk '/temp[124]/ {sub("°C", "", $2); print($2)}'

Or comma separated:

sensors | awk -v ORS=, '/temp[124]/ {sub("°C", "", $2); print($2)}' | sed 's/,$//'
share|improve this answer
    
works great! - instead of line separated, could you make it comma separated though? –  Alex Coplan Jan 3 '12 at 15:15
    
@AlexCoplan, I've edited in a suggestion to make it comma separated. –  Rob Wouters Jan 3 '12 at 15:23
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.