BASH - upravy textoveho souboru

Michal Jezek kiwi.fon.tis na atlas.cz
Pátek Prosinec 9 13:58:11 CET 2005


Michal Jezek wrote:
> Dobry den.
>     Mam teplotni cidlo, ktere mam pripojene k seriovem portu. BASH skriptem si z nej zjistim teplotu a chci si ji ukladat do textoveho souboru, ktery nasledne 1x denne z jineho serveru automaticky budu natahovat do Firebird databaze. Odtud uz data zobrazuji pres php na webu.
>     Potrebuji ve zminenem textovem souboru, ktery ma zhruba takovouhle strukturu:
> ......
> 15;20.11.2005;16:15:22;2,5
> 16;20.11.2005;16:16:23;2,6
> 17;20.11.2005;16:17:25;2,4
> 18;20.11.2005;16:18:28;2,3
> 19;20.11.2005;16:19:30;2,0
> ........
> provadet upravy. A to najit posledni radek, z nej zjistit prvni cislo pred strednikem (poradove cislo mereni abych to mohl jednoduse tahat do databaze), a pripadne vytahnout dalsi udaje - datum, cas a teplotu (oddelovac je strednik, ale nemusi to byt nutne tento znak) a tyto udaje natahnout do promenych pro dalsi praci va skriptu (pridani dalsiho zaznamu nebo pretahovani do SQL databaze)
>      Soubor si otevru, nejaky radek z nej nactu, ale nevim jakym zpusobem ten radek rozpitvat na jednotlive polozky. Nezjistil jsem jaky prikaz na toto pouzit. Nebo na to jdu od zacatku spatne a musim na to pouzit jiny skriptovaci jazyk?
>
>      Diky za pripadne nakopnuti spravnym smerem
>                        Michal Jezek---------------------------------------

Diky za reakce a rady.
Asi jsem se ale vyjadril trochu zavadejicim zpusobem. SORRY! Ten textak neportebuju upravovat tim ze z nej vypreparuju stredniky nebo nejake jine specialni upravy.
V pripade zapisu dalsi teploty potrebuju najit posledni radek - treba:
posledni_radek=$(tail -1 ./pokus.txt)
z nej vyzjistit poradi posledni merene hodnoty a strcit ji do nejake promene:
??????????? --- a tady tohle prave neumim.
k poradi merene hodnoty pricist jednicku:
dalsi_radek=$posledni_radek + 1  
A pak slozit dalsi radek a pripojit ho na konec souboru:
echo $dalsi_radek";"$(date +%d.%m.%Y)";"$(date +%T)";"$TEPLOTA  >> ./pokus.txt

No a kdyz budu prenaset data do SQL tak potrebuju najit radek s posledni teplotou ulozenou v databazi

while IFS=";" read poradi datum cas teplota
do
.....
tady to budu nejak porovnavat a zpracovavat
.....
done < ./pokus.txt

a postupne ukladat aktualni radek a nasledujici radky do SQL
echo "INSERT INTO \"teploty\" (\"poradi\",\"datum\",\"cas\",\"teplota\") \
VALUES($poradi,'$(date +%d.%m.%Y)','$(date +%T)',$TEPLOTA);" | /opt/firebird/bin/isql \
/home/database/teplota.fdb -u xxx -p xxx;

No a ted moje pokusy: Kdyz napisu 
IFS=";" read poradi datum cas teplota <./pokus.txt
tak se mi to spravne rozhodi do promenych. Jede to ale od zacatku souboru, coz v mem pripade je neefektivni.
Kdyz ale napisu
echo $(tail -1 ./pokus.txt) | IFS=";" read poradi datum cas teplota 
tak mi do promenych nic nenaplni prestoze echo $(tail -1 ./pokus.txt) vypise spravne radek.
Kdyz zadam prikaz
IFS=";" read cislo_mer datum cas teplota
tak to ceka na prikazovem radku a pokud mu napisu nejaka data oddelene strednikem a pak dam enter tak to spravne rozhodi do promenych a ty mi pak treba nasledne vypise.

Takze nevim co delam spatne?!?!?!?!
                     MJ
 ---------------------------------------
braun.atlas.cz http://www.atlas.cz/clickAD.asp?ad=84530

 





Další informace o konferenci Linux