Helló. A következő a probléma:
vannak (vízállás) adataim. 1 sor 1 adat. egész szám.ezzel kéne a következőt csinálni: fogni őket, és 10 egyenlő részre osztani az adatsor (max-min)/10 nagyságú részekre. ezekbe berakni a megfelelő adatokat. majd megmondani melyik intervallumban hány adat van, mennyi az alsó és felső határ.
A következő awk scripttel akartam megoldani:
#!/bin/awk -f
BEGIN {
reszek=10
}
{
if ( NR == 1 )
min=max=$1
if ( $1 > max )
max=$1
if ( $1 < min )
min=$1
viz[NR]=$1
}
END {
diff=max-min
printf "Delta H=%d\n",diff
for(i=0;i<reszek;i++){
also_hatar[i]=min+i*diff/reszek
vizallas[i, num]=0
}
for (i=0;i<NR;i++){
for (j=0;j<reszek; j++){
if ( also_hatar[j] < viz[i] && viz[i] < also_hatar[j+1] ){
index=vizallas[j, num]
vizallas[j, index]=viz[i]
vizallas[j, num]=index+1
break
}
}
}
for(i=0;i<reszek;i++){
for (j=0;j<vizallas[i, num];j++){
printf "%d: %d",i,vizallas[i, j]
}
}
}
de hibát ad:
awk -f vizikaka.awk vizikaka.txt
awk: vizikaka.awk:26: index=vizallas[j, num]
awk: vizikaka.awk:26: ^ syntax error
awk: vizikaka.awk:27: vizallas[j, index]=viz[i]
awk: vizikaka.awk:27: ^ syntax error
awk: vizikaka.awk:27: fatal: invalid subscript expression
pedig azt hittem lehet kétindexes tömböket csinálni. hogyan kéne? (ha estig nem mondja meg senki, megoldom c-ben. csak gondoltam kipróbálom az awk-t is...)
Köszi!
- 1623 megtekintés
Hozzászólások
az NR meg a num hol van definiálva?
- A hozzászóláshoz be kell jelentkezni
NR a végén úgy marad. tehást a sorok száma. amúgy meg midig az aktuális sorszám. a vizállás[i, num]=0 pedig az i-edik vizállás tömb num elemét 0-ba állítja. így a tömb az elemei mellet azok számát is tartalmazza. (hurrá. azért valami értelme csak van asszociatív tömböknek). De úgy látom nem te vagy az emberem.
- A hozzászóláshoz be kell jelentkezni
Jahhát nem vágom az akwot. De a 'num' mint változó továbbra sincs definiálva, üres stringet is írhattál volna helyette ahogy elnézem.
- A hozzászóláshoz be kell jelentkezni
Ha valaki felvilgosítana, továbbra is örülnék, hisz szomjúhozom a tudást, de már c-ben megírtam, úgyhogy többé-kevésbé tárgytalan)
- A hozzászóláshoz be kell jelentkezni
Az index foglalt szó.
- A hozzászóláshoz be kell jelentkezni
köszi! ez volt a hiba (meg más is) Az utókor okulására itt a helyes megoldás: (és nemmondja senki, hogy hú de nagyonnangy, meg nemkéne, addig, amíg vannak akik egész xorg.conf -okat meg dmesgeket másolnak be, és nekik senki sem szól...)
#!/bin/awk -f
BEGIN {
reszek=10
}
{
if ( NR == 1 )
min=max=$1
if ( $1 > max )
max=$1
if ( $1 < min )
min=$1
viz[NR-1]=$1
}
END {
diff=max-min
#printf "Delta H=%d\n",diff
for(i=0;i<reszek;i++){
also_hatar[i]=min+i*diff/reszek
vizallas[i,num]=0
}
for (i=0;i<NR;i++){
for (j=0;j<reszek; j++){
if ( viz[i] < also_hatar[j+1] || j == (reszek-1) ){
idx=vizallas[j,num]
vizallas[j,idx]=viz[i]
vizallas[j,num]=idx+1
break
}
}
}
for(i=0;i<reszek;i++){
print "rekesz: "i" alja: "also_hatar[i]" darabok:"vizallas[i,num]
}
}
ja, és rájöttem, ohgy szeretem az awk-t. ez az a scriptnyelv, ami elég c-szerű hogy szeressem, de ellégg nem c, hogy haszálható legyen scriptnyelvként is, szöveg/adatfeldolgozásra.
- A hozzászóláshoz be kell jelentkezni
Próbáld ki a perl-t. Három nap tanulás után már szárnyakat ad :)
- A hozzászóláshoz be kell jelentkezni
Ja. (Újabban: +1)
Szöveggel történő macera esetén, sokkal hatékonyabb bizgentyűket lehet összetákolni.
- A hozzászóláshoz be kell jelentkezni
van könyvem, bele-belekzdtem, de csak ha volt időm és erőm egyszerre.... (vonaton reggel) de ott, úgy hogy azonnal ki sem próbáltam a tömböknél leragadtam. valahogy nem volt intuitív valami... de régóta eltökétem, hogy előbb-utóbb megtanulom.
- A hozzászóláshoz be kell jelentkezni