сравнить время в awk - PullRequest
       3

сравнить время в awk

1 голос
/ 18 февраля 2010

Я хочу проверить время изменения всех файлов в одном каталоге. Если у какого-либо файла время отличается от текущего системного времени, то будет напечатан КРАСНЫЙ В противном случае, ЗЕЛЕНЫЙ печатается.

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

Можете ли вы предложить мне, как исправить вышеприведенное утверждение. Миллион спасибо.

Ответы [ 2 ]

2 голосов
/ 18 февраля 2010

Не анализировать вывод ls. Вы можете делать то, что вы хотите с stat.

stat -c%Y file будет выводить время изменения файла в секундах с 1 января 1970 года. date +%s будет выводить текущее время в секундах с 1 января 1970 года.

Итак, что вы хотите сделать, можно:

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

Если вы хотите получить список файлов выше, и вывести RED, если время отличается:

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

Если вы не используете bash, вы можете заменить пару [[ ]] на [ и ], а $(...) на

`...`
1 голос
/ 18 февраля 2010

это один из способов сделать это с помощью команды оболочки и даты.

#!/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

обратите внимание, что вам придется подстраиваться под ваши собственные потребности, так как вы можете просто захотеть сравнивать только дату или только времяи т. д., что бы это ни было, проверьте справочную страницу даты для различных форматов даты.

Если вы хотите сделать это с помощью awk, вот чистое решение awk (+ GNU date)

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
            }
        }
    }
}
' *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...