我有来自digitemp的最后一个温度值的文件。
cat /sensors/digitemp/last_meteo
a:3:{
s:16:"28DAF82D05000055";d:4.55999999999999960920149533194489777088165283203125;
s:16:"28DAE32C050000D6";d:19.379999999999999005240169935859739780426025390625;
s:16:"28F5C92D0500008E";d:20.129999999999999005240169935859739780426025390$我想让这个文件只有3个值到3个文件。这是我的想法:
awk -F':' 'BEGIN{OFS="\n"} {print $6}' /www/control/data/last_meteo |awk '{print substr($0,0,4)}'
awk -F':' 'BEGIN{OFS="\n"} {print $9}' /www/control/data/last_meteo |awk '{print substr($0,0,4)}'
awk -F':' 'BEGIN{OFS="\n"} {print $12}' /www/control/data/last_meteo |awk '{print substr($0,0,4)}'那个awk给了我:
root@router:~# awk -F':' 'BEGIN{OFS="\n"} {print $6}' /www/control/data/last_meteo |awk '{print substr($0,0,4)}'
4.55
root@router:~# awk -F':' 'BEGIN{OFS="\n"} {print $9}' /www/control/data/last_meteo |awk '{print substr($0,0,4)}'
19.3
root@router:~# awk -F':' 'BEGIN{OFS="\n"} {print $12}' /www/control/data/last_meteo |awk '{print substr($0,0,4)}'
20.1还有另一种方法可以获得这些值吗?我的tagert输出: 4.55 19.37 20.12
发布于 2016-02-14 04:24:58
不要对substr使用第二个awk (固定4个符号),请使用浮点后为2位的printf:
LC_NUMERIC=C awk -F':' '{printf "%.2f\n", $6}' /www/control/data/last_meteo其余的行也以同样的方式更改。
发布于 2016-02-14 04:38:43
awk 'BEGIN{FS=":"};{if ($0 ~ /^s:/) {printf("%-.2f ",$4)}}' /www/control/data/last_meteo 4.56 19.38 20.13
输入字段分隔符是在BEGIN中设置的(-F也可以)。您不需要设置输出字段分隔符。awk程序的其余部分只考虑以"s:"开头的行。您可以使其更具限制性,例如($0 ~ /s:16:"2/)。默认情况下,printf不会创建换行符,因此输出显示在同一行上。正如您在示例输出中所示,%-.2f打印的数字包含两个十进制数字,后跟一个空格。
https://stackoverflow.com/questions/35384763
复制相似问题