Извлечение значения из текстового файла ipmitool с использованием bash - PullRequest
1 голос
/ 12 июня 2019

Я использую Linux (Raspberry Pi) и bash. Я использую Pi для извлечения информации о датчике IPMI из Dell iDRAC. Мне удалось вытащить информацию о датчике в текстовый файл, пример ниже:

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 в 2400.000, и вывести его в файл, такой как fan1.txt

Я предполагаю, что это возможно, используя что-то вроде sed, но я немного новичок в этой области.

Ответы [ 4 ]

1 голос
/ 12 июня 2019

Каждый раз, когда вы говорите о вводе с помощью «столбцов» (полей), вы хотите использовать инструмент 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
1 голос
/ 12 июня 2019

Grep для значения и вырезать его.

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

Вы также можете передать его через tr -d ' ' или tr -d '[:space:], чтобы удалить (белые) пробелы.

0 голосов
/ 25 июня 2019

ipmitool -I lanplus -H BMC_IP -U BMC_USER -P BMC_PASS показание датчика 'Fan1 RPM' | awk '{print $ NF}'

0 голосов
/ 12 июня 2019

Не могли бы вы попробовать следующее.

awk 'match($0,/Fan1 RPM +\| +[0-9]+\.[0-9]+/){val=substr($0,RSTART,RLENGTH);sub(/.* /,"",val);print val}'  Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...