开发者

compare time in awk

开发者 https://www.devze.com 2022-12-21 00:20 出处:网络
I want to check the modified time of all开发者_C百科 the files in one directory. If any file has the time different from the current system time, then RED will be printed. Otherwise , GREEN is printed

I want to check the modified time of all开发者_C百科 the files in one directory. If any file has the time different from the current system time, then RED will be printed. Otherwise , GREEN is printed.

ls -lrt| grep main | awk '{if ($8 != `date +%R` ) print "-->RED"}END{print"-->GREEN"}' 

May you suggest me how to correct the above statement. Million thanks.


Don't parse the output of ls. You can do what you want with stat.

stat -c%Y file will output the modification time of a file in seconds since Jan 1, 1970. date +%s will output the current time in seconds since Jan 1, 1970.

So, what you want can be done by:

if [[ $(stat -c%Y main) -ne $(date +%s) ]]
then
    echo "RED"
else
    echo "GREEN"
fi

If you want the above for a list of files, and output RED if any time is different:

to_print=GREEN
for f in *main*
do
    if [[ $(stat -c%Y "$f") -ne $(date +%s) ]]
    then
        to_print=RED
        break
    fi
done
echo $to_print

If you're not using bash, then you can replace [[ ]] pair with [ and ], and $(...) with

`...`


this is one way you can do it with shell and date command

#!/bin/bash
current=$(date +%R)
for file in *main*
do
    d=$(date +%R -r "$file")
    if [ "$d" = "$current" ];then
        echo "GREEN: $file, current:$current, d: $d"
    else
        echo "RED: $file, current: $current, d: $d"
    fi
done

note that you will have to adjust to your own needs, since you may just want to compare date only, or time only, etc.. whatever it is, check the man page of date for various date formats.

If you want to do it with awk, here's a pure awk(+GNU date) solution

awk 'BEGIN{
    cmd="date +%R"
    cmd|getline current
    close(cmd)
    for(i=1;i<=ARGC;i++){
        file=ARGV[i]
        if(file!=""){
            cmd="date +%R -r \047"file"\047"
            cmd |getline filetime
            close(cmd)
            if( filetime==current){
                print "GREEN: "file
            }else{
                print "RED: "file
            }
        }
    }
}
' *
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号