我想简化这一行代码,只有当分区利用率大于或等于 60% 时才会打印。我还想在利用率值上附加一个百分号。
df -h | sed 's/%//g' | awk '{print $6,$5 }' | awk '{ if($2 >=60 ) print}' | column -t
我正在使用 BSD 变体并且我确实这样做不是安装了通用的 GNU 工具。
答案1
使用简单的 grep 会更容易一些。只有两列不会交换。
$ df -h|egrep -o "(100|[6-9].)% /.*$"
65% /
93% /home
答案2
既然这个已经被标记了awk
,那么我们就来解决这个问题。第一个awk
只是用于将第 6 列和第 5 列移动到第 1 列和第 2 列,因此我们可以摆脱它,只在第二个 awk 中使用第 6 列和第 5 列。
df -h | sed 's/%//g' | awk '{ if($5 >=60 ) print $6, $5 }' | column -t
我们也可以添加百分号
df -h | sed 's/%//g' | awk '{ if($5 >=60 ) print $6, $5 "%"}' | column -t
我们可以删除sed
并在 awk 中执行此操作
df -h | awk '{gsub(/%/,""); if($5 >=60) print $6, $5 "%"}' | column -t
我们可以column -t
通过让 awk 将值存储在数组中,然后在END
数组上的语句循环中找出最长的名称并相应地打印来删除 a,但one liner
在我看来,这不再是 a 了。
答案3
您可以将 替换sed
为 并将tr -d "%"
的两个调用合并awk
为一个:
$ df -h | tr -d "%" | awk '$5 >= 60 { print $6, $5 }' | column -t
要获取百分比登录:
$ df -h | tr -d "%" | awk '$5 >= 60 { printf("%s %s%s\n", $6, $5, (NR>1?"%":"")) }' | column -t
Awk 脚本的第二个版本根据是否大于 1 有条件地将 a 添加%
到第二个输出列。NR
如果NR
是 1,我们不添加 a,%
因为那是标题行。
答案4
如果我们可以使用 Perl:
df | perl -nE 'say "$2\t$1" if /(\d+)% (.*)/ and $1>60'
或者
df | perl -nE '/(\d+)% (.*)/ and $1>60 and say "$2\t$1"'