Сравните 2 числа и текущий день месяца - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть список:

$aws events list-rules | awk '{print$6" " $7}'
ENABLED
ENABLED
7 11
1 11
7 11
7 11
4 11
6 11

Список выше: 4 11 означает: 4 Nov

И я хотел бы сравнить этот список и текущее время: $date

Nov  7 

Я пробовал, но только сравнение дней: Мой скрипт bash:

!/bin/bash
x=`aws events list-rules |grep "transaction*" |  awk '{print$6}'`
for i in $x
 do
   used=$( date | awk '{print$3}' )
   if [ $i -lt $used ]
   then
          echo $i;

   fi
 done

Но я не знаю, как преобразовать Nov - в -> 11 дляСравнивая, но только день, но и месяц.

Пожалуйста, помогите мне, Bash или Python.

обновление:

#!/bin/bash
x=`aws events list-rules |  awk '{print$7" " $6}'`
for i in $x
 do
   used=$( date +"%m %d" )
   if [ $i -lt $used ]
   then
          echo $i;

   fi
 done

Но ошибка:

./test.sh: line 6: [: too many arguments
./test.sh: line 6: [: too many arguments
./test.sh: line 6: [: too many arguments
./test.sh: line 6: [: too many arguments

Ответы [ 3 ]

1 голос
/ 07 ноября 2019

Я думаю, вы ищете это:

date +"%m %d"

И вы можете сделать логику сравнения в вашем awk, то есть вам не нужен цикл for, все можно сделать воднострочник. Ваши коды запускают процессы date и awk x раз.

  • Поскольку у вас уже есть сценарий оболочки, вы можете извлечь m и d текущей даты и сохранитьв переменных. Awk может использовать переменные оболочки

  • Вы также можете выполнить date и получить вывод в awk, а затем в том же процессе awk выполнить сравнение.

1 голос
/ 07 ноября 2019

Вы можете использовать это awk для удаления всех записей, которые старше текущей даты:

awk -v dt="$(date '+%d %m')" '{fdt = sprintf("%02d%02d", $6, $7)} fdt >= dt' file

7 11
7 11
7 11
0 голосов
/ 07 ноября 2019

из руководства:

%m month (01..12)

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

used=$(date +%u)

если вам нужен день, это будет: date +%d

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...