Bash は、2 つの変数間の時間差を一致させます。

Bash は、2 つの変数間の時間差を一致させます。

bashコマンドを使用してMySQLからユーザーアカウントの詳細を取得するコマンドがあります。

select creationdate from users;

これは私に次のような結果を与えます

Name     Account Creation Date   Mobile 
User1    2015-06-18 16:00:00     29292922
User2    2015-06-18 16:06:00     56896906
User2    2015-06-18 16:08:00     16842146

今私が望むのは、各ユーザーを現在の日付時刻と一致させ、ACCOUNT作成CREATIONDATEが5分未満の場合は、同様のアカウントをリストする必要があります。

New accounts are user2 and user3

そんなこと。これにより、アカウントが登録されたことを知らせるテキストメッセージを送信できるようになります。

答え1

mysqlあなたのためにこれを行うことができるはずです。ただし、出力を後処理する必要がある場合は、次のようにします。

perl -MTime::Piece -lne '
  if (/^(\S+)\s+(\d{4}\S+\s+\S+)/ and
      $t = Time::Piece->strptime($2, "%Y-%m-%d %T") and
      time - $t->epoch <= 5*60
     ) {print $1}'

ユーザー名に空白文字を含めることはできません。

答え2

GNU awkを使用すると、次のことができます。

awk '
    { time = $2 " " $3; gsub(/[-:]/, " ", time); t = mktime(time) }
    (systime() - t) <= 300 {print $1}
'

答え3

このスレッドを更新するのを忘れました。その日、以下を使って解決策を見つけました。

mysql -u$SQLUSER -p$SQLPASS -e "use $DB; select creationdate,login,package,expirydate,mobile from users WHERE creationdate >= NOW() - INTERVAL 5 MINUTE;"

関連情報