преобразование год-месяц-день в юлианский день

у меня есть список, содержащий данные в формате (год-месяц-день-hrmn-00S.GHTUJ_035)

2017-01-22-1522-00S.GHTUJ_035
2016-12-21-1725-00S.GHTUJ_035
2019-11-25-1123-00S.GHTUJ_035
2015-09-25-1329-00S.GHTUJ_035

Теперь я хочу преобразовать year-month-day часть данных в julianday и хочу вставить ее в правую часть. поэтому мой ожидаемый результат должен быть

2017-01-22-1522-00S.GHTUJ_035   022
2016-12-21-1725-00S.GHTUJ_035   ...
2019-11-25-1123-00S.GHTUJ_035   329
2015-09-25-1329-00S.GHTUJ_035   ...

Я могу написать только половину сценария, поэтому мне нужна помощь экспертов. Заранее спасибо.

while read line;
do
echo $line
done< list

person glk shu    schedule 23.11.2020    source источник
comment
У вас в тегах есть bash, но можете ли вы использовать другие инструменты? Что вы пытались до сих пор интерпретировать дату, которая не работала?   -  person ti7    schedule 23.11.2020
comment
не могли бы вы показать это на мои данные   -  person glk shu    schedule 23.11.2020
comment
@tink Ссылка предназначена для получения текущего дня по юлианскому календарю, а не для преобразования.   -  person cigien    schedule 23.11.2020
comment
подскажите пожалуйста решение господа...   -  person glk shu    schedule 23.11.2020
comment
Вас интересует юлианский день или день года?   -  person kvantour    schedule 23.11.2020
comment
меня интересует Джулиан Дэй   -  person glk shu    schedule 23.11.2020
comment
@cigien - это то, о чем говорит заголовок ... но первая функция выполняет общее преобразование.   -  person tink    schedule 23.11.2020


Ответы (1)


datepart=${line%-[0-9][0-9][0-9][0-9]-00S*} даст вам часть даты вашей строки, и вы можете использовать date +%j -d $datepart, чтобы преобразовать ее в юлианский.

${line%-[0-9][0-9][0-9][0-9]-00S*} — это синтаксис bash для взятия $line и удаления всего (именно это означает %) из -, четырех цифр, еще - и 00S до конца строки (*).

date -d позволяет указать конкретную дату для выполнения действий. +%j сообщает дате, какой вывод он должен дать. См. man dae для получения подробной информации и других параметров.

person Ljm Dullaart    schedule 23.11.2020
comment
Это не юлианский день, а день года - person kvantour; 23.11.2020
comment
В компьютерном программировании значение даты по юлианскому календарю иногда меняется. Юлианской датой считается количество дней, прошедших с начала определенного года. Что, кстати, точно соответствует требуемому выходу OP. Не случайно дата использует букву j для этого формата. - person Ljm Dullaart; 23.11.2020
comment
Ладно, я понятия не имел! Проголосуйте за то, что узнали что-то здесь - person kvantour; 23.11.2020