Извлечь значение из текста и присвоить его переменной - PullRequest
0 голосов
/ 26 декабря 2018

Я работаю над сценарием, который считывает информацию о батарее из системного файла.Просто мне нужно взять общую емкость аккумулятора (3000) из строки MAX_IBAT (мА): 3000;и положить его в переменную.Это содержимое файла, из которого я читаю:

charging_source: NONE;
charging_enabled: 0;
overload: 0;
Percentage(%): 50;
Percentage_raw(%): 50;
gs_cable_impedance: 0
gs_R_cable_impedance: 0
gs_aicl_result: 0
batt_cycle_first_use: 2017/01/01/12:00:06
batt_cycle_level_raw: 26157;
batt_cycle_overheat(s): 0;
htc_extension: 0x0;
usb_overheat_state: 0;
USB_PWR_TEMP(degree): 304;
ISEN_VALUE_ADC: 228;
ISEN_VALUE: 0;
SOC(%): 27;
VBAT(mV): 3707;
IBAT(mA): 383;
IUSB(mA): 0;
MAX_IBAT(mA): 3000;
MAX_IUSB(mA): 0;
AICL_RESULT: 0
VBUS(uV): 0;
BATT_TEMP: 320;
HEALTH: 1;
BATT_PRESENT(bool): 1;
CHARGE_TYPE: 1;
CHARGE_DONE: 0;
USB_PRESENT: 0;
USB_ONLINE: 0;
CHARGER_TEMP: -1;
CHARGER_TEMP_MAX: 803;
CC_uAh: 889648;
USB_CMD_IL_REG: 0x00;
USBIN_CURRENT_LIMIT_CFG: 0x14;
USBIN_AICL_OPTIONS_CFG: 0xc4;
FAST_CHARGE_CURRENT_CFG: 0x78;
FG_BCL_LMH_STS1: 0x00;

Что я пробовал:

awk '/^ +MAX_IBAT(mA): && $NF!=0{print $NF} Input_file

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

grep решение:

  • -o выводит точный вывод, а не всю строку
  • -P perl mode
  • (?<=MAX_IBAT\(mA\):\s) утверждение за задним числом для печати только чисел, которым предшествует строка 'MAX_IBAT (мА):'

команда:

max_ibat=$(grep -oP '(?<=MAX_IBAT\(mA\):\s)\d+' Input_file)
echo "$max_ibat"

Вывод:

3000

sed решение:

  • -n тихий режим -> по умолчанию не печатать
  • /^MAX_IBAT(mA):/ обрабатывают только строки, начинающиеся с MAX_IBAT(mA):
  • /s/[^0-9]//gp, заменяют все символы, которые не являются числами, ничем (удаляют их), а затем печатают с p.

команда:

max_ibat=$(sed -n '/^MAX_IBAT(mA):/s/[^0-9]//gp' Input_file)
echo "$max_ibat"

Выход:

3000
0 голосов
/ 26 декабря 2018

Используются ":" и ";"в качестве разделителей полей:

max_ibat=$(awk -F ': |;' '$1=="MAX_IBAT(mA)" {print $2}' file)
echo "$max_ibat"

Вывод:

3000
...