|
|
#!/bin/bash |
|
|
|
|
|
# TOTALILATOR |
|
|
# ============================================================================== |
|
|
# NOTE: Must run after separator.sh script. |
|
|
|
|
|
# This script parses the files in: |
|
|
|
|
|
# - data/light-meter-1/ |
|
|
# - data/light-meter-2/ |
|
|
|
|
|
# and creates new CSV files which includes the total number of readings on a |
|
|
# given day and hour (of that day). The daily totals are stored at the top the |
|
|
# data/ directory at: |
|
|
|
|
|
# - data/light-meter-1-daily-totals.csv |
|
|
# - data/light-meter-2-daily-totals.csv |
|
|
|
|
|
# and the hourly breakdowns are stored in : |
|
|
|
|
|
# - light-meter-1-hourly-totals |
|
|
# - light-meter-2-hourly-totals |
|
|
|
|
|
# Because of the amount of files produced, I've made the script seperate each |
|
|
# hourly-based file into a directory corresponding to the month the readings |
|
|
# where taken. So, you should see a file structure similar to this, |
|
|
|
|
|
# data/ |
|
|
# └── light-meter-1-hourly-totals/ |
|
|
# ├── 2021-06 |
|
|
# │ ├── 2021-06-01.csv |
|
|
# │ ├── 2021-06-02.csv |
|
|
# │ ├── 2021-06-03.csv |
|
|
# │ ├── 2021-06-30.csv |
|
|
# │ └── 2021-06-31.csv |
|
|
# ├── 2021-07 |
|
|
# │ ├── 2021-07-01.csv |
|
|
# │ ├── 2021-07-02.csv |
|
|
# │ ├── 2021-07-03.csv |
|
|
# │ ├── 2021-07-30.csv |
|
|
# │ └── 2021-07-31.csv |
|
|
# └── 2021-08 |
|
|
# ├── 2021-08-01.csv |
|
|
# ├── 2021-08-02.csv |
|
|
# ├── 2021-08-03.csv |
|
|
# ├── 2021-08-29.csv |
|
|
# ├── 2021-08-30.csv |
|
|
# └── 2021-08-31.csv |
|
|
|
|
|
# 3 directories, 93 files (I've shorted the list for brevity) |
|
|
|
|
|
# Note: Repetitive use of file names |
|
|
# ============================================================================== |
|
|
|
|
|
# You will find I've used the date of the readings as the go-to naming |
|
|
# convention for naming files. Basically, I'm relying on the system's directory |
|
|
# structure to provide the context for the data in each file. I didn't want the |
|
|
# file names to carry the 'folder structure' and end up with longer file names |
|
|
# the deeper into the data/ directory you go. The trade-off is when viewing |
|
|
# files on their own, their file names don't provide enough context and can be |
|
|
# confusing when dealing with them in isolation (outside of the projects |
|
|
# directory structure). |
|
|
|
|
|
|
|
|
getDailyReadingTotals () { |
|
|
mtr=$1; # Light Meter |
|
|
echo "date,reading" > "data/light-meter-$mtr-daily-totals.csv"; |
|
|
for month in {6..7} ; do |
|
|
for day in {1..31} ; do |
|
|
if [[ $month -eq 6 ]] && [[ $day -lt 13 ]]; then |
|
|
: |
|
|
else |
|
|
if [[ $day != 31 ]] && [[ $month != "06" ]]; then |
|
|
if [[ $day -lt 10 ]] ; then d="0$day"; else d="$day"; fi |
|
|
if [[ $month -lt 10 ]] ; then m="0$month"; else m=$month; fi |
|
|
echo "2021-$m-$d, $(awk 'END{print NR-1}' "data/light-meter-$mtr/2021-$m-$d.csv")" \ |
|
|
>> "data/light-meter-$mtr-daily-totals.csv"; |
|
|
fi |
|
|
fi |
|
|
done |
|
|
done |
|
|
} |
|
|
|
|
|
getHourlyReadingTotals () { |
|
|
mtr=$1; # Light Meter |
|
|
mkdir -p "data/light-meter-$mtr-hourly-totals"; |
|
|
for month in {6..7} ; do |
|
|
if [[ $month -lt 10 ]]; then m="0$month"; else m=$month; fi |
|
|
mkdir -p "data/light-meter-$mtr-hourly-totals/2021-$m" |
|
|
for day in {1..31} ; do |
|
|
if [[ $month -eq 6 ]] && [[ $day -lt 13 ]]; then |
|
|
: |
|
|
else |
|
|
if [[ $day != 31 ]] && [[ $month != "06" ]]; then |
|
|
if [[ $day -lt 10 ]]; then d="0$day"; else d="$day"; fi |
|
|
echo "hour,reading" \ |
|
|
> "data/light-meter-$mtr-hourly-totals/2021-$m/2021-$m-$d.csv"; |
|
|
for hour in {0..24} ; do |
|
|
if [[ $hour -lt 10 ]]; then h="0$hour"; else h=$hour; fi |
|
|
echo "$h, $(awk 'END{print NR-1}' "data/light-meter-$mtr/2021-$m-$d/2021-$m-$d--$h.csv")" \ |
|
|
>> "data/light-meter-$mtr-hourly-totals/2021-$m/2021-$m-$d.csv"; |
|
|
done |
|
|
fi |
|
|
fi |
|
|
done |
|
|
done |
|
|
} |
|
|
|
|
|
# Process Light Meter 1 first... |
|
|
getDailyReadingTotals "1"; |
|
|
getHourlyReadingTotals "1"; |
|
|
|
|
|
# Process Light Meter 2 second... |
|
|
getDailyReadingTotals "2"; |
|
|
getHourlyReadingTotals "2";
|
|
|
|