簡體   English   中英

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

[英]Extracting value from ipmitool text file using bash

我正在使用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這樣的方法是可行的,但是我在這個領域還是個新手。

Grep的價值,並削減它。

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

您也可以通過tr -d ' 'tr -d '[:space:]來刪除(空格)空格。

每當您談論帶有“列”(字段)的輸入時,您要使用的工具都是awk,而不是grep或sed,因為awk是專為在字段上工作而其他工具卻沒有設計的。

$ 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

您可以嘗試以下嗎?

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM