我有一个显示磁盘使用量输出的Linux命令
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 2.8T 1.1T 1.7T 39% /data/disk2
/dev/sdc1 2.8T 1.1T 1.7T 41% /data/disk3
/dev/sdd1 2.8T 1.1T 1.7T 40% /data/disk4
我需要帮助,在脚本(Python或Bash)中继续这个,让我知道磁盘是否相互之间的差异超过5%。如果它们超过5%不平衡,我会编写代码来通过电子邮件发送结果。任何帮助将不胜感激。
答案 0 :(得分:2)
这个怎么样:
import re
s = """
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 2.8T 1.1T 1.7T 39% /data/disk2
/dev/sdc1 2.8T 1.1T 1.7T 41% /data/disk3
/dev/sdd1 2.8T 1.1T 1.7T 40% /data/disk4
"""
regex = re.compile(r'\d{1,2}%')
result = [int(a[:-1]) for a in regex.findall(s)]
# [39, 41, 40]
如果你想在最后比较它们......
if max(result) - min(result) > 5:
print("Imbalanced!")
else:
print("Balanced!")
当然,你可以调用os-level函数并得到它们的输出:
command_output = subprocess.check_output(['df', '-h']).decode('utf-8')
答案 1 :(得分:1)
也可以使用awk
:
df | awk '\
BEGIN { \
max=0; \
min=2000; \
} \
NR>1 { \
pf = $5; \
sub( /\%/, "", pf ); \
pf = pf + 0; \
if ( pf > max ) max = pf; \
if ( pf < min ) min = pf; \
} \
END { \
diff = ( max - min ); \
print diff \
}'
答案 2 :(得分:1)
awk 解决方案:
df -h | awk 'NR>1{ a[NR-1]=substr($5,1,length($5)-1) }
END{ asort(a); print ((a[length(a)]-a[1]) > 5? "Not good!" : "Good!") }'
输出(输入):
Good!