【发布时间】:2019-03-28 03:11:12
【问题描述】:
我有一个脚本正在运行,它建立一个远程 SSH 隧道并运行以下代码来检查可用磁盘空间并使用 AWK 进行格式化并报告为:
#!/bin/bash
for DATA in $(sudo df -h | grep -E '/$|/var$|/tmp$' | awk '{print $1","$5","$6}' | tr -d '%')
do
DISK=$(echo $DATA | awk -F, '{print $1}')
FREE=$(echo $DATA | awk -F, '{print $2}')
MOUNT=$(echo $DATA | awk -F, '{print $3}')
if [[ "$FREE" -ge '90' ]]
then
echo "$HOST does not have enough room to patch, \"$MOUNT\" ($DISK) is ${FREE}% full"
fi
done
我特意删除了运行所需的转义 正确地在远程外壳上(为了可读性)
这运行良好,除非行太长并且 df 跨行剪切输出,如下所示:
这会弄乱 for 循环并返回错误数据。我想要关于如何格式化换行符的任何建议。我用 sed/tr/printf 尝试了几件事,我参考了这两个 printf 备忘单:
- https://alvinalexander.com/programming/printf-format-cheat-sheet
- https://notgnoshi.github.io/printf/
我参考了其他标题相似的帖子,并且已经尝试导出 COLUMNS,但这似乎没有任何作用。
感谢您的反馈,谢谢。
编辑:df (GNU coreutils) 8.4
【问题讨论】:
-
这是什么版本的df? GNU coreutils 实现似乎没有这个问题,尽管busybox 有。重新格式化的明显方法是注意续行没有足够的字段,并且续行以空格开头
-
df (GNU coreutils) 8.4
-
edit 您的问题包括minimal reproducible example 以及一些文本示例输入和预期输出,以便我们为您提供帮助。