szkriptelés

Sanos nem vagyok programozó, csak műkedvelő.
Most egy olyan gondom akadt, amit egyelőre nem tudok megoldani.
Dátumok átalakításából származó számokat teszek egy DATUM nevű fájlba.
Nevezetesen különböző időpontok unix idejét. Tehát a fájl csak számokat fog tartalmazni soronként.
Ezzel nincs gond.

A gond ott van hogy egy futó FŐscriptnek bekéne hívnia egy ALscriptet, mely egy ellenőrzést végezne el,
majd visszadná a vezérlést a FŐscriptnek.
call? A behívott ALscript dolga hogy az aktuális dátumot összehasonlítsa a DATUM fájlban lévőkkel,
és amelyik a legközelebb van hozzá a jövőben, arra van szükség.
A DATUM fájl tartalmazhat már elmúlt unix időket, azok nem érdekesek, és tartalmazhatnak
több olyat melyek még nem jártak le. Ezekből az kell, amelynek ideje a legközelebb van az aktuális időhöz.

Nem tudom érthető-e?

Példával statuálva:
A DATUM fájl tartalma:
1297985172
1297988178
1297988670
1297989132
1317989680

Az aktuális unix idő teszem azt
1297988790

Nos ezt a számot kell összevetni a DATUM fájlban lévőkkel egyesével. Ami elmúlt, az nem érdekes,
csak az ami ehhez a számhoz a legközelebb esik, és még nem jött el az ideje.
Jelen esetben csak a 1297989132 szám lesz a jó!

No ezt nem értem hogyan oldjam meg.
A feltételvizsgálatot értem, mert ebben az esetben aritmetikai műveletről van szó.
-lt (<)
-gt (>)
actualtime=$(date +%s)
if [ ${actualtime} -lt ? ]; then

A kérdőjel helyére kellene az ami soronként ellenőrzi a DATUM fájl számait.
De nyilván egy parancsot nemigen lehet odaírni csak annak eredményeit.
Nem is tudom talán egy for ciklussal kéne megoldani?
De hogyan áll meg ha megtalálta a megfelelő számot?
Vagy inkább sed-del, de az meg nekem kínaiul van.

A problémámat bonyolítja hogyha az ALscript lefutott, a FŐscript kapja vissza a vezérlést.
Vagy ez amúgy is így működik?

Hozzászólások

A cilust talán így a legegyszerűbb:

aron@deb-aron:/tmp$ cat a.txt
aaa
bbb
cccc
ddd
aron@deb-aron:/tmp$ while read a; do echo --- $a ---; done < ./a.txt
--- aaa ---
--- bbb ---
--- cccc ---
--- ddd ---

Bash-ben lehet függvényeket létrehozni, amiket a source paranccsal tudsz "importálni" egy file-ból. Pl.:

aron@deb-aron:/tmp$ cat b
VALTOZO=42
function a()
{
echo Szia! A fuggveny vagyok.
}
aron@deb-aron:/tmp$ echo $VALTOZO

aron@deb-aron:/tmp$ a
bash: a: parancs nem található
aron@deb-aron:/tmp$ sou
soundinfo     sound-juicer  source
aron@deb-aron:/tmp$ source b
aron@deb-aron:/tmp$ echo $VALTOZO
42
aron@deb-aron:/tmp$ a
Szia! A fuggveny vagyok.
aron@deb-aron:/tmp$


DATUMFAJL=/itt/van/a/datumlista
sort -n $DATUMFAJL | awk -v most=$(date +%s) ' $1 >= most { print $1}' | head -1

Első lépésben numerikusan sorbarendezed a megfelelő fájlt.
Utána az awk-nak a "-v" kapcsolóval egy, a programban használt változójának értéket adsz. A változó értéke a date +%s parancs kimenete lesz.
Az awk-kal azoknak a soroknak az első elemét kiírod, ahol az eslő elem nagyobb vayg egyenlő mint a "most" változó értéke, azaz az aktuális unix idő (date +%s).
Az awk kimenetét becsövezve a head bemenetére ez utóbbival az első sort kiírva máris megkaptad az aktuális időnél nem kisebb értékek közül a legkisebbet.

Tisztán bash:


#!/bin/bash

d=$(date +%s)
while read sd; do
    if [ $sd -gt $d ]; then
        echo $sd
        break
    fi
done

Használat:


cat fileadátumokkal | script

Ha nincs az eredeti file-od rendezve akkor


cat fileadátumokkal | sort -n | script

vagy:


sort -n fileadátumokkal | script