Форматирование строк даты в файле с оболочкой linux bash - PullRequest
1 голос
/ 03 апреля 2020

Когда я котирую файл, пример формата вывода:

ok: servername Mon May 23 00:00:00 EDT 2018
ok: servername Thu Jul 16 00:00:00 EDT 2019

Я бы хотел, чтобы формат был примерно таким:

ok: servername 05/23/2018
ok: servername 07/16/2019

Мне нужно использовать Linux bash оболочка для этого. Если кто-нибудь может мне помочь, я буду очень благодарен.

Ответы [ 3 ]

3 голосов
/ 03 апреля 2020

Когда производительность имеет значение. Поместите это в script.awk:

BEGIN{ 
  m["Jan"]="01"; m["Feb"]="02"; m["Mar"]="03"; m["Apr"]="04"; 
  m["May"]="05"; m["Jun"]="06"; m["Jul"]="07" # to be completed
}
{
  print $1, $2, m[$4] "/" $5 "/" $8
}

Использование: awk -f script.awk logfile

Выход:

ok: servername 05/23/2018
ok: servername 07/16/2019
2 голосов
/ 03 апреля 2020

С GNU date вы можете указать входной файл, содержащий все ваши строки даты; в сочетании с cut и paste:

paste -d ' ' \
    <(cut -d ' ' -f-2 infile) \
    <(date -f <(cut -d ' ' -f3- infile) '+%m/%d/%Y')

Вывод:

ok: servername 05/23/2018
ok: servername 07/16/2019

При этом используется замена процесса для создания временного входного файла для date -f и для paste построить новый выходной файл.

0 голосов
/ 03 апреля 2020

Согласно man date команда может

отображать время, описанное STRING, а не «сейчас»

через --date или -d. Поэтому, если вы храните свои значения в переменной

DATE="Thu Jul 16 00:00:00 EDT 2019"

, вы можете использовать что-то вроде

date --date="${DATE}" +%m/%d/%Y

для переформатирования отметки времени.

Для получения дополнительной информации вы можете заглянуть в Преобразование форматов даты в bash.

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