Проблемы с использованием команды date в awk - PullRequest
0 голосов
/ 07 февраля 2020

Я пишу раздел кода awk, который читает файл журнала в следующем формате:

[03/02/2020 10:01:01]   SOME DATA
[03/02/2020 10:05:25]   SOME MORE DATA
[03/02/2020 11:54:38]   AND YET SOME DATA

et c.

I wi sh для определения метки времени эпохи. объединяя данные в полях $1 и $2 и вставляя между ними пробел, чтобы удовлетворить формат ввода, необходимый для команды bash date.

Это фрагмент кода, который я написал :

cmd="date -d" substr($1,2,10) substr($2,1,8) " +%s"
cmd | getline this_date
print this_date

В тот момент, когда я запускаю скрипт, я получаю эту ошибку ...

date: invalid date ‘03/02/202010:01:01’
date: invalid date ‘03/02/202010:05:25’
date: invalid date ‘03/02/202011:54:38’

et c.

Так что кажется для меня я почти там, но, как и ожидалось, команда date хочет пробел между частями даты и времени.

Я пробовал много способов попытаться кодировать «пробел» между substr($1,2,10) substr($2,1,8) в первом строка кода выше, но каждый раз, когда я получаю сообщение об ошибке.

Кто-нибудь может посоветовать лучший подход?

1 Ответ

2 голосов
/ 07 февраля 2020

Вам не хватает пробела между двумя substr s, которые вы извлекаете; и вам нужно добавить кавычки, чтобы объединить их в одну строку.

cmd="date -d \"" substr($1,2,10) " " substr($2,1,8) "\" +%s"

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

Просто, чтобы разобраться, запускаемая команда имеет вид

date -d "03/02/2020 10:01:01" +%s

, который переворачивается в

date
-d
03/02/2020 10:01:01
+%s

после того, как оболочка завершит ее разбор. Кавычки необходимы для сохранения аргумента опции -d в виде одной строки, даже если она содержит пробел. Таким образом, это скорее вопрос оболочки, чем вопрос Awk.

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