我们想要编写获取Pfree
大小但使用整数而不是浮点数的命令
pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg lvm2 a-- 277.97g 111.97g
例如下面pvs
我们可以做
pvs --units g | awk '{print $NF}' | sed s'/\./ /g' | awk '{print $1}' | tail -1
它给了
111
但在不同的情况下,我们得到两条或多PV
条线然后需要计算总数Pfree
示例1
pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg lvm2 a-- 149.51g 53.51g
/dev/sda3 vg lvm2 a-- 50.00g 2.1g
示例2
pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg lvm2 a-- 149.51g 520.00m
/dev/sda3 vg lvm2 a-- 50.00g 3.51g
所以我们想搜索 lvm 命令,它可以给出 Giga 的计算结果
关于示例 1 ,我们应该得到55.6
或者
关于示例2,我们应该得到4.2
lvm 有什么建议可以实现这个魔法吗?
如果没有,我将很感激得到awk/sed/perl可以提供帮助的语法
答案1
仅获得 PV 可用空间pvs
# pvs -o pv_free --unit=g --no-suffix --no-heading
1.00
0.31
并与bc
# pvs -o pv_free --unit=g --no-suffix --no-heading | paste -s -d+ - | bc
1.31
答案2
或者稍微不优雅且相当不必要地使用 awk (与 Vojtech 的解决方案相比),可以根据您的目的进行调整(因为您已经提到了您对 awk 的渴望):
[root@localhost Documente]# lvs --no-heading --unit=g
root cl -wi-ao---- 17,00g
swap cl -wi-ao---- 2,00g
[root@localhost Documente]# lvs --no-heading --unit=g | awk '{sum+=$4} END {print sum}'
19
但我个人会坚持我上面的答案的简单性。