使用bash从ipmitool文本文件中提取值

时间:2019-06-12 09:00:08

标签: bash awk

我正在使用Linux(Raspberry Pi)和bash。我正在使用Pi从Dell iDRAC中提取IPMI传感器信息。我设法将传感器信息提取到一个txt文件中,如下所示:

Fan1 RPM         | 2400.000   | RPM        | ok    | na        | 600.000   | 840.000   | na        | na        | na

Fan2 RPM         | 2400.000   | RPM        | ok    | na        | 600.000   | 840.000   | na        | na        | na

Fan3 RPM         | 2400.000   | RPM        | ok    | na        | 600.000   | 840.000   | na        | na        | na

Fan4 RPM         | 2280.000   | RPM        | ok    | na        | 600.000   | 840.000   | na        | na        | na

Fan5 RPM         | 2400.000   | RPM        | ok    | na        | 600.000   | 840.000   | na        | na        | na

Fan6 RPM         | 2520.000   | RPM        | ok    | na        | 600.000   | 840.000   | na        | na        | na

Inlet Temp       | 11.000     | degrees C  | ok    | na        | -7.000    | 3.000     | 42.000    | 47.000    | na

Exhaust Temp     | 18.000     | degrees C  | ok    | na        | 3.000     | 8.000     | 70.000    | 75.000    | na

Temp             | na         |            | na    | na        | na        | na        | 0.000     | na        | na

Temp             | na         |            | na    | na        | na        | na        | 0.000     | na        | na

我想要实现的目的是提取第二列中的值,例如Fan1 RPM值2400.000,并将其转储到文件中,例如fan1.txt

我猜想使用sed这样的方法是可行的,但是我在这个领域还是个新手。

4 个答案:

答案 0 :(得分:1)

使用Grep作为值并将其剪切。

grep "Fan1 RPM" input_file | cut -d'|' -f2 > fan1.txt

您还可以通过tr -d ' 'tr -d '[:space:]用管道将其删除以删除(空白)。

答案 1 :(得分:1)

每当您谈论带有“列”(字段)的输入时,您要使用的工具都是awk,而不是grep或sed,因为awk是专为在字段上工作而其他工具却没有的。 / p>

$ awk -F' *[|] *' '$1=="Fan1 RPM"{print $2}' file
2400.000

$ awk -F' *[|] *' '($1=="Inlet Temp") && ($7 >= 3) {print $6, $9, $10}' file
-7.000 47.000 na

或仅转换为CSV以便可以被Excel等读取:

$ awk -F' *[|] *' -v OFS=',' 'NF{$1=$1;print}' file
Fan1 RPM,2400.000,RPM,ok,na,600.000,840.000,na,na,na
Fan2 RPM,2400.000,RPM,ok,na,600.000,840.000,na,na,na
Fan3 RPM,2400.000,RPM,ok,na,600.000,840.000,na,na,na
Fan4 RPM,2280.000,RPM,ok,na,600.000,840.000,na,na,na
Fan5 RPM,2400.000,RPM,ok,na,600.000,840.000,na,na,na
Fan6 RPM,2520.000,RPM,ok,na,600.000,840.000,na,na,na
Inlet Temp,11.000,degrees C,ok,na,-7.000,3.000,42.000,47.000,na
Exhaust Temp,18.000,degrees C,ok,na,3.000,8.000,70.000,75.000,na
Temp,na,,na,na,na,na,0.000,na,na
Temp,na,,na,na,na,na,0.000,na,na

答案 2 :(得分:0)

请您尝试以下。

awk 'match($0,/Fan1 RPM +\| +[0-9]+\.[0-9]+/){val=substr($0,RSTART,RLENGTH);sub(/.* /,"",val);print val}'  Input_file

答案 3 :(得分:0)

ipmitool -I lanplus -H BMC_IP -U BMC_USER -P BMC_PASS传感器读取'Fan1 RPM'| awk'{print $ NF}'