bash: синтаксическая ошибка: ожидается операнд (токен ошибки "-") - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь просмотреть журнал определенных сообщений за последний час. Журналы отформатированы следующим образом:

[1/18/19 9:59:13:791 CST] <Extra text here...>

У меня были проблемы с проведением сравнения дат с помощью awk, поэтому я подумал о том, чтобы перейти в эпоху и сравнить. Я беру поле 1 и вырезаю миллисекунды из поля 2 и удаляю [] (хотя, думаю, я мог бы просто сделать [ для своих целей).

while read -r line || [[ -n "$line" ]]
do
    log_date_str="$(awk '{gsub("\\[|\\]", "");print $1" "substr($2,1,length($2)-4)}' <<< "$line")"
    log_date="$(date -d "$log_date_str" +%s)"
    [[ $(($(date +%s)-$log_date)) -le 3600 ]] && echo "$line"
done < /path/to/file

Когда я пытаюсь запустить этот файл журнала, я получаю эту ошибку:

date: invalid date `************ S'
-bash: 1547832909-: syntax error: operand expected (error token is "-")

Принимая одну дату, например «18.01.19 9:59:13» работает с преобразованием даты в эпоху, но я не уверен, куда идти с этой ошибкой.

1 Ответ

0 голосов
/ 18 января 2019

Как отмечалось в комментариях, я получал данные, которые не были датой, поскольку они анализировали весь журнал. Очистка входного файла для желаемого текста решила мои проблемы, и я изменил на предложение Чарльза.

while read -r line || [[ -n "$line" ]]
do
    log_date_str="$(awk '{gsub("\\[|\\]", "");print $1" "substr($2,1,length($2)-4)}' <<< "$line")"
    log_date="$(date -d "$log_date_str" +%s)"
    (( ( $(date +%s) - log_date ) <= 3600 )) && echo "$line"
done < <(grep ERROR_STRING /path/to/file.log)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...