Skip to content

Instantly share code, notes, and snippets.

@bennyistanto
Created July 5, 2020 15:11
Show Gist options
  • Save bennyistanto/59dc509a145e81dff1b78e9388e74799 to your computer and use it in GitHub Desktop.
Save bennyistanto/59dc509a145e81dff1b78e9388e74799 to your computer and use it in GitHub Desktop.
Arrange IMERG data based on number of days within month
#!/bin/bash
# Arrange IMERG data based on number of days within month
# Source: https://github.com/andyprasetya
# -- Start script: change directory ke target directory, misal: 'imerg'
cd imerg
# -- Set shell option ke 'nullglob' - optional, bisa di-comment/disabled
shopt -s nullglob
# Mulai loop ke seluruh file dalam target directory.
# Biasanya menggunakan 'i', tapi ini pakai 'file' untuk memperjelas penulisan variable
for file in *.nc4;
do
# Untuk mengolah string, digunakan fungsi 'cut'
# Variable PREFIX, yaitu 'imerg_'
PREFIX=`echo "$file" | cut -c1-6`
# Variable YEAR, dari imerg_YYYYMMDD.nc4
YEAR=`echo "$file" | cut -c7-10 | bc`
# Variable MM, dari imerg_YYYYMMDD.nc4
# Ada yang khusus, jika ada prefix '0', seperti 01,02,..09, maka bilangannya jadi OCTAL.
# Bilangan ini harus diconvert dulu ke base-10 dengan 'bc' karena akan dikalikan dengan 720, 744 dan 696
MMMONTH=`echo "$file" | cut -c11-12 | bc`
# Variable DD, dari imerg_YYYYMMDD.nc4
DDDATE=`echo "$file" | cut -c13-14`
# Variable EXTENSION, yaitu 'nc4'
EXTENSION="${file##*.}"
# Block: Identifikasi leap year modulus 4
if [ $((YEAR % 4)) == 0 ]; then
if [ $MMMONTH == 2 ]; then
# perlakuan jika MM nya '02'
MMMONTH=`echo "$((MMMONTH * 696))"`
elif [ $MMMONTH == 1 -o $MMMONTH == 3 -o $MMMONTH == 5 -o $MMMONTH == 7 -o $MMMONTH == 8 -o $MMMONTH == 10 -o $MMMONTH == 12 ]; then
# perlakuan jika hasil perkalian < 1000, tambah prefix '0'
if [ $((MMMONTH)) == 1 ]; then
# tambah prefix '0'
MMMONTH=`echo 0"$((MMMONTH * 744))"`
else
# tanpa prefix
MMMONTH=`echo "$((MMMONTH * 744))"`
fi
else
MMMONTH=`echo "$((MMMONTH * 720))"`
fi
else
if [ $MMMONTH == 1 -o $MMMONTH == 3 -o $MMMONTH == 5 -o $MMMONTH == 7 -o $MMMONTH == 8 -o $MMMONTH == 10 -o $MMMONTH == 12 ]; then
if [ $((MMMONTH)) == 1 ]; then
# tambah prefix '0'
MMMONTH=`echo 0"$((MMMONTH * 744))"`
else
# tanpa prefix
MMMONTH=`echo "$((MMMONTH * 744))"`
fi
else
MMMONTH=`echo "$((MMMONTH * 720))"`
fi
fi
# Block operasi file - contoh: di-list saja dari filename original ke filename baru
echo ${file} $PREFIX$YEAR$MMMONTH$DDDATE.$EXTENSION
# Contoh: jika akan scan + copy + rename ke directory lain yang sejajar dengan 'imerg'
# -- cp ${file} ../renamedfiles/$PREFIX$YEAR$MMMONTH$DDDATE.$EXTENSION
done
# command untuk check hasil operasi:
# ls -l ../renamedfiles
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment