Вы можете использовать paste
для сопоставления шаблона с файлом:
paste <(printf "%s\n" *.txt) search.patterns | while IFS=$'\t' read -r file pattern; do
grep -- "$pattern" "$file"
done
Я предполагаю, что имена файлов не содержат табуляции.
Я предлагаю этот вариант :, если например вы хотите узнать дату 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
Чтобы получить 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 января.