Вы можете получить количество минут, кратное 15 меньше, чем текущие минуты (или минуты, указанные в первом параметре ), с помощью:
a=$(date date -d "2011-02-23 01:05" +%-m) # need only minutes.
a=${1:-"$a"} # or use the value from the first parameter.
a=${a#0} # remove one optional leading zero to
# avoid issues with 08 and 09.
b=$((a-a%15)) # Round down to a 15 minutes multiple.
c=$((b+15)) # end time
echo "$b $c"
Если вам нужна полная строка даты, используйте:
$ printf 'java %s%02d\n' "$(date -d "2011-02-23 01:05" +"%Y:%m:%d %H:")" "$b"
java 2011:02:23 01:00
Или, в баше:
$ printf -v a '%(%s)T\n' -1
$ printf '%(java %Y-%m-%d %H:%M:%S)T\n' "$(( a - a % (60*15) ))"
java 2018-08-30 22:45:00
Если вы хотите сопоставить столбец 3 файла1 со столбцом 4 файла2, вы можете использоватьawk
:
awk -F'\t' '
NR==FNR{ arr[$4]; next }
{ print > (($3 in arr) ? "file3" : "file4") }
' file2 file1
Сначала считывается файл2, а четвертое поле в массиве arr
сохраняется как индекс.
Затем прочитайте файл1 и print
каждую запись. Если в массиве существует третье поле, перенаправьте вывод в файл3, в противном случае — в файл4.