我用 sed 编写了一个小脚本来转换它:
kaefert@Ultrablech ~ $ cat /sys/class/power_supply/BAT0/uevent
POWER_SUPPLY_NAME=BAT0
POWER_SUPPLY_STATUS=Full
POWER_SUPPLY_PRESENT=1
POWER_SUPPLY_TECHNOLOGY=Li-ion
POWER_SUPPLY_CYCLE_COUNT=0
POWER_SUPPLY_VOLTAGE_MIN_DESIGN=7400000
POWER_SUPPLY_VOLTAGE_NOW=8370000
POWER_SUPPLY_POWER_NOW=0
POWER_SUPPLY_ENERGY_FULL_DESIGN=45640000
POWER_SUPPLY_ENERGY_FULL=44541000
POWER_SUPPLY_ENERGY_NOW=44541000
POWER_SUPPLY_MODEL_NAME=UX32-65
POWER_SUPPLY_MANUFACTURER=ASUSTeK
POWER_SUPPLY_SERIAL_NUMBER=
转换成这样的 csv 文件格式:
kaefert@Ultrablech ~ $ Documents/Asus\ Zenbook\ UX32VD/power_to_csv.sh
"date";"status";"voltage µV";"power µW";"energy full µWh";"energy now µWh"
2012-07-30 11:29:01;"Full";8369000;0;44541000;44541000
2012-07-30 11:29:02;"Full";8369000;0;44541000;44541000
2012-07-30 11:29:04;"Full";8369000;0;44541000;44541000
... (in a loop)
我现在想要将这些数字中的每一个除以 1.000.000,这样它们就不会代表 µV,而是 V 和 W,而不是 µW,这样一目了然就可以轻松解释它们。当然,一旦我在 libre office calc 中打开了这个 csv,我就可以手动执行此操作,但我想自动化它。
所以我发现,我可以在 sed 之间调用外部程序,如下所示:
...
s/\nPOWER_SUPPLY_PRESENT=1\nPOWER_SUPPLY_TECHNOLOGY=Li-ion\nPOWER_SUPPLY_CYCLE_COUNT=0\nPOWER_SUPPLY_VOLTAGE_MIN_DESIGN=7400000\nPOWER_SUPPLY_VOLTAGE_NOW=\([0-9]\{1,\}\)/";'`echo 0`'\1/
并且我可以通过以下方式获得我想要的值:
echo "scale=6;3094030/1000000" | bc | sed 's/0\{1,\}$//'
但现在的问题是,我如何将匹配“\1”传递给外部命令?
如果您有兴趣查看完整的脚本,可以在此处找到:http: //koega.no-ip.org/mediawiki/index.php/Battery_info_to_csv