Для продолжительности, включающей несколько месяцев или лет, которая должна ссылаться на конкретную дату, поскольку разные месяцы или разные годы имеют разную продолжительность.
Чтобы узнать, сколько лет/месяцев/дней осталось до 1327 дней, с помощью dateutils:
$ ddiff -f '%Y years, %m months, %d days' today "$(dadd now 1327)"
3 years, 7 months, 19 days
(вы можете иногда найти ddiff
доступным как datediff
или dateutils.ddiff
; то же самое дляdadd
).
Вот что я получаю сейчас на 2017 -09 -25 (, потому что это с 2017 -09 -25 по 2021 -05 -14 ). Если бы я запустил это в 2018 -03 -01, я бы получил:
3 years, 7 months, 17 days
потому что это с 2018 -03 -01 по 2021 -10 -18.
И в тот 2018 -03 -01 день, 1327 дней назад даст 3 years, 7 months, 16 days
.
Дополнительная информация на Как рассчитать и отформатировать продолжительность даты с помощью инструментов GNU, а не дату результата?
Это должно достичь того, что требуется:
#!/usr/bin/env bash
while read line; do
declare -a array=($line)
if test ${#array[@]} != 3; then
read line2
array+=($line2)
fi
f1=${array[0]}
f2=${array[1]}
echo $f1 $f2
done
run with : test.sh < inputfile
Проверяет, содержит ли строка три элемента, если нет, присоединяется к следующей строке.
Поскольку вы все равно используете awk
, почему бы не положиться на него полностью? Попробуйте
read f1 f2 <<< $(awk '{while (NF < 3) {getline X; $0 = $0 FS X}; print $1, $2}' file)
Вы можете использовать xargs -n3 -a inputfile
, чтобы переупорядочить входной файл и поместить три элемента в каждую строку.
while read -r f1 f2 temp; do
echo "f1=$f1"
echo "f2=$f2"
done < <(xargs -n3 -a inputfile)
В предположении, что каждая хорошо сформированная -строка ваших входных данных состоит из трех слов (, которые здесь свободно определены как строки, не содержащие пробелов ), вы можете предварительно обработать свои входные данные:
<input_file tr -s '[:blank:]' '\n' | paste - - - | column -t
Здесь мы заменяем любой пустой символ (, включая <newline>
символы ), одним <newline>
, переставляя результат в строки из трех слов и красиво форматируя вывод — последний является ненужным, косметический шаг, учитывая ваш вопрос.