Вот небольшой сценарий, который решает проблему, когда 10 минут назад - предыдущий день. Я уверен, что это можно было бы сделать более элегантно:
#!/bin/bash
DAY=`date --date='-10 min' +"%a"`
SEC=`date --date='-10 min' +"%s"`
if [[ "$DAY" == "Mon" ]]; then
DDIF="7"
elif [[ "$DAY" == "Tue" ]]; then
DDIF="1"
elif [[ "$DAY" == "Wed" ]]; then
DDIF="2"
elif [[ "$DAY" == "Thu" ]]; then
DDIF="3"
elif [[ "$DAY" == "Fri" ]]; then
DDIF="4"
elif [[ "$DAY" == "Sat" ]]; then
DDIF="5"
elif [[ "$DAY" == "Sun" ]]; then
DDIF="6"
fi
EPOCH=$(awk "BEGIN {print $SEC-(86400*$DDIF); exit}")
date -d@"$EPOCH"
Это позволяет узнать, на какой день 10 минут назад выпадает. Узнает, сколько дней удалено с понедельника. Затем умножает это количество дней на 86400 (количество секунд в одном дне) и вычитает его из Эпохи, рассчитанной 10 минут назад. Наконец, он преобразует значение эпохи обратно в стандартный формат.
Как я уже сказал, не обязательно простой, однолинейный или элегантный.
Команда, которую необходимо выполнить как hdfs
, короче. Твое что-то вроде:
su -l hdfs -c "hadoop fs -du -s /home/test/*" | awk '{ sum += $1 } END { print sum }'
И лучше использовать sudo
для этой цели:
sudo -u hdfs "hadoop fs -du -s /home/test/*" | awk '{ sum += $1 } END { print sum }'