【问题标题】:output print/mail with IF and echo command使用 IF 和 echo 命令输出打印/邮件
【发布时间】:2021-04-16 09:07:48
【问题描述】:

我想在特定文件夹中搜索 10 个最大文件大小,如果 omscb* 文件超过阈值,它将向人们发送邮件以检查和删除这些文件。 假设如果 10 个文件中有 3 个文件从 omscb* 开始。我正在使用 AIX 。 例如 :- omscb1 5GB omscb2 7GB omscb2 3GB 和其他 7 个文件不是以 omscb 开头的。 因此,我在下面编写了脚本,但输出仅来自最后一个文件,即 omscb2 3gb,因为根据排序,它正在覆盖当前记录。请建议如何在输出中获取所有文件名。

THRESHOLD="5"
LOG=/home/log1.txt
cd /home/var/log
du -sg *|sort -r|head -10 | awk '{print $1"\t"$2}' | while read LINE; do
PERC1=`echo $LINE |awk '{print $1}'`
PERC2=`echo $LINE |awk '{print $2}'`
if [ $PERC1 -gt  $THRESHOLD ] || [ "$PERC2" = omscb* ] ;then
#echo $PERC1 $PERC2 \n >> ${LOG}
fi
done

print $LOG

=============== 提前致谢。

【问题讨论】:

  • 你应该安装GNU!find;默认AIX!find 的功能非常有限。

标签: if-statement awk echo aix


【解决方案1】:

似乎大部分逻辑都可以封装到一个 awk 语句中

du -sg /home/var/log |sort -r|head -10 | awk -v thresh="5" -v logfile="/home/log1.txt" '{ if ($1 > thresh | $2 ~ "omscb") { print $1" "$2 >> logfile;close(logfile) } }'

将排序后的 du 命令的输出通过管道传输到 awk 中,并将日志文件和阈值作为变量传递给 awk 语句中使用。如果第一个空格分隔的字段大于变量 thresh,或者第二个字段模式匹配“omscb”,则将由空格分隔的第一个和第二个字段打印到日志文件并关闭它。

【讨论】:

    猜你喜欢
    • 2012-04-04
    • 2022-01-04
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多