Skriptit / epoch.sh

Joskus törmään tilanteisiin, joissa olen tekemisissä Unix epoch-aikaleimojen kanssa, ja ne ovat kovin vaikealukuisia tavalliselle ihmiselle. Aikaleimat voi poimia esim. CSV-tiedostosta LibreOffice Calcilla omaksi listakseen ja allaolevaa Linux shell scriptiä hyödyntäen muuntaa kerralla automaattisesti tavallisiksi, ihmisen luettaviksi aikaleimoiksi, jotka voi sitten esimerkiksi siirtää alkuperäisten tilalle LibreOffice Calcilla.

#!/usr/bin/env bash
#
# Tämä on Linux shell script nimeltään epoch.sh, joka muuntaa nk. Unix
# epoch-aikaleimat muotoon YYYY_MM_DD_hh_mm, eli vuosi, kuukausi,
# päivä, tunti ja minuutti, välissä erottimena alaviivat.
#
# Käyttöohje:
#
# Luo tyhjä kansio ja tee sinne tiedosto.txt -niminen tekstitiedosto,
# joka sisältää Unix epoch-aikaleimat omilla riveillään sellaisenaan
# (vain numeroita ja pisteitä, ei lainausmerkkejä tai muita
# ylimääräisiä merkkejä). Laita tämä skripti samaan kansioon tuon
# tiedosto.txt:n kanssa ja aja tämä skripti. Jokaisen aikaleiman tulee
# olla omalla rivillään. Alkuperäisen tiedoston aikaleimat muunnetaan,
# mutta alkuperäisestäkin tiedostosta luodaan ensin samaan kansioon
# tiedosto_epoch_bak.txt -niminen varmuuskopio.
#
# - Toti 21.1.2026
#
echo
echo "Vaihe 1/3"
echo "Luodaan varmuuskopio tiedostosta"
echo
cp tiedosto.txt tiedosto_epoch_bak.txt

echo
echo "Vaihe 2/3"
echo "Luetaan tiedoston sisältö"
echo
sisalto=$(cat tiedosto.txt)

echo
echo "Vaihe 3/3"
echo "Muunnetaan Unix epoch-ajat perusaikaformaattiin"
echo
while IFS= read -r rivi; do
    normiaika=$(date -d "@$rivi" "+%Y"_"%m"_"%d"_"%H"_"%M")
    echo "$normiaika" >> valiaikainen1.txt
done <<< "$sisalto"
rm tiedosto.txt
mv valiaikainen1.txt tiedosto.txt

echo
echo "Valmista!"
echo