Преобразование строки даты в отметку времени

Perl на помощь :Выведите все строки между первой xyzи последнейEnd:

 perl -ne '
     $inside = 1        if /^xyz$/;
     $seen_end = 1      if $inside && /^End$/;
     push @buff, $_     if $inside;
     print splice @buff if /^End$/ && @buff;
' input-file

С первого появления xyz,мы начинаем помещать все строки в буфер. Как только встречается End, мы выводим и очищаем буфер (, см. склейку ), но мы продолжаем помещать строки в буфер на случай, если позже появится еще один End.

0
15.08.2019, 13:00
2 ответа

Проблема здесь, похоже, связана с одинарными -кавычками в$DATEJ. Ваша переменная накладывает их.

Измените это на

DATEJ=`echo -n "2012-03-02 22:00"`

и в финальной команде:

date -d "$DATEJ EDT" +%s

Это сработает:

$ date -d '2012-03-02 22:00 EDT' +%s
1330740000
$ DATEJ=`echo -n "2012-03-02 22:00"`
$ echo $DATEJ
2012-03-02 22:00
$ date -d "$DATEJ EDT" +%s
1330740000

РЕДАКТИРОВАТЬ

На самом деле, вам не нужно echoдату, если только ваш сценарий не требует этого, поэтому переменную$DATEJможно просто записать как

DATEJ="2012-03-02 22:00"
1
28.01.2020, 02:39

Надеемся, что приведенная ниже информация поможет вам или кому-то еще в поиске решения.

Строка даты может иметь формат mm/dd/yyyy hh:mm:ss zzzили любой эквивалентный. Например,:"06/10/2021 21:00:00 EST"или "06/10/2021 09:00:00 EST"Данные TZ являются необязательными.

Вы можете дать следующую команду, чтобы получить временную метку эпохи:

date -d "06/10/2021 00:00:00 EST" +"%s"

ИЛИ

вы можете передать строку в переменной, например:

date_string="06/10/2021 00:00:00 EST"
date -d "$date_string" +"%s"

Для вашей конкретной проблемы должно работать следующее:

date -d '2012-03-02 22:00 EDT' +%s
DATEJ=`echo -n "2012-03-02 22:00"`
echo $DATEJ
date -d "$DATEJ EDT" +%s
0
10.06.2021, 15:43

Теги

Похожие вопросы