Мне нужно посчитать разницу дат с помощью bash

Вариант zsh, который маскирует три четверти текста:

mask() printf '%s\n' ${(l:$#1::*:)1:$#1*3/4}

Пример:

$ mask secretvalue
********lue
$ mask 12345678
******78
$ mask 1234
***4

Чтобы замаскировать первые 8 символов:

mask() printf '%s\n' ${(l:$#1::*:)1:8}

Чтобы замаскировать все, кроме последних 3 символов:

mask() printf '%s\n' ${(l:$#1::*:)1: -3}

Чтобы замаскировать случайное число символов:

mask() printf '%s\n' ${(l:$#1::*:)1: RANDOM%$#1}
2
05.07.2020, 21:56
2 ответа

Вы можете использовать цикл while, где условие основано на возможности чтения из стандартного ввода:

$ cat input.txt
Mar 16
Mar 12
Mar 13
Mar 19
Mar 14
Mar 17
$ cat ex.sh
#!/bin/bash

datediff() {
    local d1="$(date -d "$1" +%s)"
    local d2="$(date -d "$2" +%s)"

    echo "$(( (d1 - d2) / 86400 )) days"
}

while read line; do
    datediff 'now' "${line}"
done < "${1}"
$./ex.sh input.txt
111 days
115 days
114 days
108 days
113 days
110 days

Здесь сценарий принимает единственный аргумент :входной файл. Хотя он может прочитать строку из файла, он вызывает вашу функцию datediff, передавая nowи содержимое line, прочитанное из файла.

5
18.03.2021, 23:21

Добавление надежной поддержки календаря — сложная задача, и я рекомендую использовать для этого специальную программу. К счастью, кто-то сделал всю тяжелую работу за нас.

изhttp://www.unixwiz.net/tools/datemath.html:

Too many times we have needed to do a bit of math on a date -- say, "today + 7 days" -- but in traditional MM/DD/YYYY format this is really tricky (especially in a shell script). A result of this need we built the datemath tool which can perform these functions from the command line or from a shell script. Examples:

$ datemath today + 5
06/23/2003

$ datemath '12/25/2003 - today'
188

$ datemath today + 5 weeks
07/25/2003

when will my machine be up for one year?
$ uptime
 11:09am  up 317 days, 15:38,  7 users,  load average: 0.16, 0.04, 0.01
$ datemath today + 365 - 317
10/24/2003

Вы можете скачать исходный код с веб-сайта и собрать его.

1
18.03.2021, 23:21

Теги

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