मैं बैश के भीतर एलएम-सेंसर से अपना एएमडी जीपीयू तापमान प्राप्त करने की कोशिश कर रहा हूं। इसलिए मैंने सही लाइन पाने के लिए awk पाइप किया। लेकिन अब मुझे इससे डेटा प्राप्त करने के लिए नियमित अभिव्यक्ति की आवश्यकता है।

मेरा वर्तमान कोड है:

sensors | awk '/edge/ {print$2}'

यह आउटपुट +53.0°C

अब मुझे केवल 53.0 की जरूरत है। मैं इसे बैश में कैसे कर सकता हूं?

2
JimmyD 7 नवम्बर 2020, 13:48

2 जवाब

सबसे बढ़िया उत्तर

बिना किसी रेगेक्स के, आप इसे awk में कर सकते हैं:

# prints 2nd field from input
awk '{print $2}' <<< 'edge +53.0°C foo bar'
+53.0°C

# converts 2nd field to numeric and prints it
awk '{print $2+0}' <<< 'edge +53.0°C foo bar'
53

# converts 2nd field to float with one decimal point and prints it
awk '{printf "%.1f\n", $2+0}' <<< 'edge +53.0°C foo bar'
53.0

तो आपके मामले के लिए, आप इसका उपयोग कर सकते हैं:

sensors | awk '/edge/ {printf "%.1f\n", $2+0}'
2
anubhava 7 नवम्बर 2020, 13:51

क्या आप कृपया अनुसरण करने का प्रयास कर सकते हैं।

awk 'match($2,/[0-9]+(\.[0-9]+)?/){print substr($2,RSTART,RLENGTH)}' Input_file

या

sensors | awk 'match($2,/[0-9]+(\.[0-9]+)?/){print substr($2,RSTART,RLENGTH)}'

स्पष्टीकरण: ऊपर के लिए विस्तृत विवरण जोड़ना।

awk '                                ##Starting awk porgram from here.
match($2,/[0-9]+(\.[0-9]+)?/){       ##using match function to match digits DOT digits(optional) in 2nd field.
  print substr($2,RSTART,RLENGTH)    ##printing sub string from 2nd field whose starting point is RSTART till RLENGTH.
}
' Input_file                         ##Mentioning Input_file name here.
1
RavinderSingh13 7 नवम्बर 2020, 14:28