Shell 从文本及其编号中检索特定字符。即92%。Unix
我使用下面的命令从unix服务器提取有关数据使用情况的数据信息Shell 从文本及其编号中检索特定字符。即92%。Unix,shell,unix,server,Shell,Unix,Server,我使用下面的命令从unix服务器提取有关数据使用情况的数据信息 df -P /data >> /data/prod/schjobs/data_usage.txt 文本的输出如下所示: 'Filesystem 512-blocks Used Available Capacity Mounted on /dev/vg02/lv_sas_data_raid1 4271649954 3922870768 348779186 92% /data'
df -P /data >> /data/prod/schjobs/data_usage.txt
文本的输出如下所示:
'Filesystem 512-blocks Used Available Capacity Mounted on
/dev/vg02/lv_sas_data_raid1 4271649954 3922870768 348779186 92% /data'
我想问的是如何检索92%
编号,以便在之后进行比较,并可能发送通知邮件并删除一些文件夹以清除一些空间
您能帮忙吗?您可以在下面这样的变量中获取值
TOTAL_OCCUPIED=$(echo 'Filesystem 512-blocks Used Available Capacity Mounted on /dev/vg02/lv_sas_data_raid1 4271649954 3922870768 348779186 92% /data' | awk '{print $12}')
或
您可以直接使用下面的命令获取值
92%
:
SPACE=$(df -P /data |tail -1 |awk '{print $5}')
echo $SPACE
同样,重定向的.txt
文件也是如此:
SPACE=$(cat /data/prod/schjobs/data_usage.txt |tail -1 |awk '{print $5}')
echo $SPACE
随后,您可以使用if
条件来比较磁盘空间,发送邮件通知,然后通过删除最大的文件/目录来清理空间
编辑答案
要在不使用%
的情况下获取值,只需将输出通过管道传输到cut
命令,如下所示,然后使用该变量进行比较:
SPACE=$(df -P /data |tail -1 |awk '{print $5}' |cut -d '%' -f1)
echo $SPACE
请让我知道它是否有用。到目前为止您尝试了什么?@PanagiotisIoannidis:您可以首先使用
tail
或grep
从data\u usage.txt
提取所需的行,然后(例如)cut
提取字段。如果您确实知道data_usage.txt最多包含一个百分比,那么使用grep-oE'[0-9]+%'
提取它就更容易了。您好,User123,谢谢您的回答,我刚刚关闭了括号,效果很好。然而,我认为我应该删除%以便进行比较。对的但是我应该把它转换成字符串吗?你能帮个忙吗?1)你可以让awk
把东西当作数字来处理(而不是使用cut
),所以试试这个echo“abcd92%e”| awk'{print$5+0}
2)你可以让awk
像这样使用最后一行(而不是使用tail
)“3)如果您的装载点有空格,您的字段号可能不正确,因此您可以从右侧向后计数,而不是从左侧向前计数df|awk'END{print$(NF-1)+0}
我们都在这里学习和分享!你的回答已经很好了,我已经投了票。
SPACE=$(df -P /data |tail -1 |awk '{print $5}' |cut -d '%' -f1)
echo $SPACE