暂无图片
df -h内容筛选并加列
我来答
分享
Thomas
2023-01-31
df -h内容筛选并加列

df -h输出如下:

[oracle@iZ25jhvkfvmZ shiyuan]$ df -h
Filesystem Size Used Avail Use% Mounted on

/dev/vda1 40G 18G 20G 48% /
/dev/vdb1 28G 14G 13G 51% /u01
/dev/vde1 114G 105G 2.6G 98% /u03
/dev/vdc2 19G 8.0G 9.7G 46% /u02
ip:/u03/nfs_test 32G 15G 16G 48% /nfs_test

要求做如下处理:

1、只列出标题行以及第6列为“/”和“/u03”的行。注意必须是第6列为这两个字符的,如果某行中其它列含“/”和“/u03”但第6列不含,该行不该被列出(比如最后一行就不该被列出)

2、对输出的两行,再加一列, 如果第5列的数值大于80%,则新加列显示“alert”

最后输出结果为:

Filesystem Size Used Avail Use% Mounted on

/dev/vda1 40G 18G 20G 48% /

/dev/vde1 114G 105G 2.6G 98% /u03 alert

静待大神解决。

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
大大刺猬

如果不是要求第一行的话,命令会简单点. 非最终效果展示的话, 不建议 df -h, 使用 df -PT (多了列文件系统)

效果:

t20230221.png

shell命令

df -h | awk '{if (($6=="/") || ($6=="/u03") || (NR==1)) print $0}' | awk '{sub(/\%/,""); if (($5 > 80)&&(NR!=1)) {$7="alert";$5=$5"%"} else $5=$5"%"; print $0}'
复制

讲解下:
($6=="/") 第6列为 ‘/’
($6=="/u03") 第6列为 ‘/u03’
(NR==1) 标题(第一行)
sub(/%/," ") 去掉%, 方便数字比较
(($5 > 80)&&(NR!=1)) 第5列大于80并且不是第一行

暂无图片 评论
暂无图片 有用 9
打赏 0
暂无图片
Thomas

不仅采纳了楼上的答案,还要赞一句:


大大刺猬确实是大神,和娃哈哈一个级别的!

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏