Измените формат даты с текста на номер, используя одну команду awk - PullRequest
0 голосов
/ 17 апреля 2020

У меня очень большой файл журнала, который мне нужно обрабатывать и сохранять в формате csv каждый час.

формат подобен приведенному ниже (эта строка также после удаления многих символов с помощью sed)

Apr-05 11:10:12 xxxx xxx xxxx xxxx xxxx

Мне нужно сохранить это как

04-05 11:10:12,xxxx,xxx,xxxx,xxxx,xxxx

Я пытался установить переменную используя $ 1 и попробуйте преобразовать его, используя дату GNU, но не работает

awk -v fixdate="($1 +%m-)" '{print fixdate"-"$2" "$3 "," $x "," $y "," $z}'

Я предпочитаю метод с одной строкой, чтобы сделать это.

Как я могу назначить часть $ 1 (Apr-05) для awk переменная и обработать его с датой GNU перед печатью.

1 Ответ

2 голосов
/ 17 апреля 2020

В зависимости от того, может ли любой из этих x s быть -, это может быть все, что вам нужно:

$ awk -F'-' '{
    gsub(/ /,",",$2); sub(/,/," ",$2);
    printf "%02d-%s\n", (index("JanFebMarAprMayJunJulAugSepOctNovDec",$1)+2)/3, $2
}' file
04-05 11:10:12,xxxx,xxx,xxxx,xxxx,xxxx
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...