Есть ли способ использовать день года в качестве формата ввода для команды даты?

Вы можете использовать pasteдля сопоставления шаблона с файлом:

paste <(printf "%s\n" *.txt) search.patterns | while IFS=$'\t' read -r file pattern; do
    grep -- "$pattern" "$file"
done

Я предполагаю, что имена файлов не содержат табуляции.

11
08.03.2021, 22:07
2 ответа

Я предлагаю этот вариант :, если например вы хотите узнать дату 80 числа:

# take the number of day today
$ n=$(date +%j)
# set some number of days you want to know the date
$ t=80
# subtract the 'n', and add the 't'
$ date -d "-$n day +$t day" %F
2021-03-21

Адаптировано к вашему примеру:

$ n=$(date +%j)
$ t=66
$ date -d "-$n day +$t day" %F
2021-03-07
5
18.03.2021, 22:26

Чтобы получить 66-й день года с помощью GNUdate:

$ date --date='jan 1 + 65 days' +%F
2021-03-07

или

$ date --date='dec 31 last year + 66 days' +%F
2021-03-07

С помощью date --date='066 day' +%Fвы получите дату через 66 дней от сегодняшнего дня. 8 марта это 13 мая.


В приведенном выше примере используется GNU date. В OpenBSD (не то, что вы просили, но в любом случае )вы можете сделать что-то вроде следующего:

$ date -u -r "$(( $(date -ju -f %m%d 0101 +%s) + 65*86400 ))" +%F
2021-03-07

, которая была бы чем-то похожа на первую команду GNU dateвыше тем, что добавляет некоторое время с 1 января.

19
18.03.2021, 22:26

Теги

Похожие вопросы