shell 阅读文本文件中给定目录时比较当前时间

ddrv8njm  于 2023-04-12  发布在  Shell
关注(0)|答案(1)|浏览(147)

尝试读取stage.txt并列出所有超过10分钟的文件,但不知何故,我的输出是重复的,并没有回显正确的行与旧的时间。有没有可能的方法来保留和打印值,因为我已经用awk操作的数据?
/tmp/stage.txt

-rw-r--r-- 1 admin admin 3046 Apr 9 15:20 /opt/1.txt
-rw-r--r-- 1 admin admin 3046 Apr 9 15:20 /opt/2.txt
-rw-r--r-- 1 admin admin 3046 Apr 9 15:20 /opt/3.txt
-rw-r--r-- 1 admin admin 3046 Apr 9 15:31 /opt/4.txt

验证码:

##current time = 15:40
while IFS= read -r line
do
    diffstg="10"
    timeminstg=`echo $line |awk -F" " '{print $8}'|sed 's/://g'` ## getting the time each line##
    timediffstg=$((10#$timeHH$timeMM - 10#$timeminstg)) ## 15:40 - 15:20 and so on
    if [ "$timediffstg" -ge "$diffstg" ] 
    then
        echo $datetoday > $email
        echo  ${line} >> $email
    else
        echo "Nothing older than 10 mins"
    fi
done < /tmp/stage.txt

我得到的错误输出:if used $datetoday〉$email

Sun Apr  9 15:40:10 CEST 2023
-rw-r--r-- 1 admin admin 3046 Apr 9 15:31 /opt/4.txt

我得到的错误输出:if used $datetoday〉〉$email -以某种方式正确输出,但日期重复。

Sun Apr  9 15:40:10 CEST 2023
-rw-r--r-- 1 admin admin 3046 Apr 9 15:20 /opt/1.txt
Sun Apr  9 15:40:10 CEST 2023
-rw-r--r-- 1 admin admin 3046 Apr 9 15:20 /opt/2.txt
Sun Apr  9 15:40:10 CEST 2023
-rw-r--r-- 1 admin admin 3046 Apr 9 15:20 /opt/3.txt

预期输出:

Sun Apr  9 15:40:10 CEST 2023
-rw-r--r-- 1 admin admin 3046 Apr 9 15:20 /opt/1.txt
-rw-r--r-- 1 admin admin 3046 Apr 9 15:20 /opt/2.txt
-rw-r--r-- 1 admin admin 3046 Apr 9 15:20 /opt/3.txt
nbnkbykc

nbnkbykc1#

你可以使用一些变量来知道它是否是你第一次报告文件。如果是第一次,首先回显头部(使用single〉来覆盖target)并设置,它不再是第一次了。无论如何,回显文件(使用double〉〉,所以它附加到target)。
就像这样

##current time = 15:40
firstline=1
while IFS= read -r line
do
    diffstg="10"
    timeminstg=`echo $line |awk -F" " '{print $8}'|sed 's/://g'` ## getting the time each line##
    timediffstg=$((10#$timeHH$timeMM - 10#$timeminstg)) ## 15:40 - 15:20 and so on
    if [ "$timediffstg" -ge "$diffstg" ] 
    then
        if [ "$firstline" == "1" ]
        then
                echo first $firstline
                firstline=0
                echo $datetoday > $email
        fi    
        echo  ${line} >> $email
    else
        echo "Nothing older than 10 mins"
    fi
done < /tmp/stage.txt

$email中的输出应该如下所示

Sun Apr  9 20:57:28 CEST 2023
-rw-r--r-- 1 admin admin 3046 Apr 9 15:20 /opt/1.txt
-rw-r--r-- 1 admin admin 3046 Apr 9 15:20 /opt/2.txt
-rw-r--r-- 1 admin admin 3046 Apr 9 15:20 /opt/3.txt

相关问题