Назад | Перейти на главную страницу

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

У меня есть файл с датой и временем на пару тысяч строк.

Мне нужно преобразовать:

2019/08/02-01:23:50+0000

Кому:

02/Aug/2019-01:23:50 +0000   

У меня пока есть

th=`grep -o '\[.*\]' test.txt | sed 's/\"//g' | head -1
echo $th | date -d +'%Y/%b/%d-%T'

date: invalid date ‘+%Y/%b/%d-%T’

Как я могу прочитать дату и отформатировать ее?

Что-то вроде этого:

echo '2019/08/02-01:23:50+0000' | awk -F'/|\+|-' -v month=$(echo '2019/08/02-01:23:50+0000' | awk -F'-' '{print $1}'|date +%b -f -) '{printf "%s/%s/%s-%s +%s\n", $3,month,$1,$4,$5}'

В одну строку или

MONTH=$(echo '2019/08/02-01:23:50+0000' | awk -F'-' '{print $1}'|date +%b -f -)
echo '2019/08/02-01:23:50+0000' | awk -F'/|\+|-' -v month="$MONTH" '{printf "%s/%s/%s-%s +%s\n", $3,month,$1,$4,$5}'

Первый шаг - извлечь 2019/08/02 и преобразовать 08 в август, затем с несколькими разделителями извлечь все поля и printf с желаемым форматом. Хитрость здесь, мимо shell переменная для awk (заполните бесплатно, чтобы удалить \n в printf формат)