Pitää kirjoittaa tunnin välein dataa tiedostoon: YYYY/MM/DD.txt
Miten tämä onnistuu? Jos tiedostoa/hakemistoa ei ole olemassa se luodaan. Jos on niin lisätään rivi tiedoston loppuun.
Eli vaikka suoritetaan crontabissa tunnin välein skripti joka tekee:
"echo Hello World" >> /data/YYYY/MM/DD.txt
Eli miten sen saa toimimaan?
PS: YYYY on siis vuosi, MM kuukausi ja DD päivämäärä.
Miten tämä onnistuu? Jos tiedostoa/hakemistoa ei ole olemassa se luodaan. Jos on niin lisätään rivi tiedoston loppuun.
Eli vaikka suoritetaan crontabissa tunnin välein skripti joka tekee:
"echo Hello World" >> /data/YYYY/MM/DD.txt
Eli miten sen saa toimimaan?
PS: YYYY on siis vuosi, MM kuukausi ja DD päivämäärä.
Vastaukset 10
Vanhimmat
Tiedoston nimessä ei saa olla / merkkiä. Eli ei onnistu.
Mutta kävisikö tämä?
echo "Hello World" >> data/$(date +%F.txt)
/-merkki on tässä tapauksessa hakemistorakenne.
Eli /data hakemiston alla on hakemisto YYYY, joka on siis 2011 sen alla on hakemisto KK eli kuukausi, joka on 12 ja siinä hakemistossa on sitten DD.txt tiedosto johon tulee sitten tuo "Hello World"
# tiedoston sisalto:
export PATH=/bin:/usr/bin:$PATH
tiedosto=/data/`date "+%Y/%m/%d"`.txt
mkdir -p `dirname $tiedosto`
echo "Hello World" >> $tiedosto
Kutsu tuon sisältöistä tiedostoa crontab:sta.
Kiitoksia! tuo toimii loistavasti, en tiennyt tuosta "dirname" komennosta, siitä on tässä tapauksessa aika paljon hyötyä.
Entäs jos meillä on tekstitiedosto, missä rivit:
2011-12-03 10:00:02 82.00
2011-12-04 12:15:01 23.45
2011-12-04 12:30:04 12.89
Niin miten ne saisi syötettyä edellä mainittuun hakemistorakenteeseen?
Eli eka rivi menisi sellaisenaan hakemistoon 2011/12 ja tiedostoon 03.txt jne...
export PATH=/bin:/usr/bin:$PATH
cat koe.txt | while read rivi; do
if [ ! -z "$rivi" ]; then
YYYY=${rivi:0:4}
MM=${rivi:5:2}
DD=${rivi:8:2}
tiedosto=./data/$YYYY/$MM/$DD.txt
mkdir -p `dirname $tiedosto`
echo "$rivi" >> $tiedosto
fi
done
pikku virhe äskeisessä, ota pois piste tuon /data/ edestä
Keksin itse :)
#!/bin/sh
while read inputline
do
xxx="$(echo $inputline | cut -f 1 | cut -d ' ' -f 1 | sed -e 's/-/\//g')"
tiedosto=data/$xxx.txt
mkdir -p `dirname $tiedosto`
echo $inputline >> $tiedosto
done < data.csv
exit 0
Tuli muuten tosi tehoton ja hidas skripti :p
Kestää varmasti puol tuntia käydä läpi reilun 100 tuhatta riviä...
Mutta tärkeintä, että se toimii, kerranhan se pitää ajaa....
yesh! juuri näin pitää toimia kun kyseessä on työtehtävä. ihan älyttömästi putkitusta, niin saa aikaa kulumaan ;)
cut ja sed aiheuttaa hitautta, kokeile noita muuttujia kuten edellä jo oli