Sziasztok!
Az alábbi szkriptet írtam arra, hogy megszámoljam, hogy egy fájlban, amelynek minden sorában egy nem feltéten egész szám van, hány 0-tól nagyobb, ill 0-tól kisebb szám van. A fájl nem mindig ugyanannyi sorból áll.
A probléma az, hogy mindig 0-t kapok holott legalább 20 nem null szám van.
A pozitiv=$(( $pozitiv+1 )) értékadásnál van a baj. Ha 1-est írok ki ehelyett, akkor azok száma rendben van.
#!/bin/bash
pozitiv=0
negativ=0
cat $1 | while read
do
korte=$REPLY
if [[ $korte > 0 ]]
then
pozitiv=$(( $pozitiv+1 ))
else
negativ=$(( $negativ+1 ))
fi
done
echo $pozitiv
- 4558 megtekintés
Hozzászólások
próbáld meg így:
pozitiv=$((pozitiv+1))
- A hozzászóláshoz be kell jelentkezni
Tudom, hogy számítanak a whitespace-ek, úgyhogy próbálgattam is őket. Amúgy régen sok ilyet írtam, úgyhogy van egy minimális tapasztalatom.
- A hozzászóláshoz be kell jelentkezni
Nem is itt a gond.
#!/bin/bash
pozitiv=0
negativ=0
while read korte
do
if [[ $korte > 0 ]]
then
pozitiv=$(( $pozitiv+1 ))
else
negativ=$(( $negativ+1 ))
fi
done < $1
echo $pozitiv;
- A hozzászóláshoz be kell jelentkezni
Itt a megoldás. Köszi szépen.
- A hozzászóláshoz be kell jelentkezni
Nincs mit. A magyarázat meg stra -nál.
- A hozzászóláshoz be kell jelentkezni
A bug-ot en nem latom fent, de itt egy masik, mukodo megoldas:
pozitivak:
egrep -c "^\+[0-9]+" file
negativak:
egrep -c "^\+[0-9]+" file
Egyebkent ha szamolgatni kell bash-banakkor enmindig bc-t hasznalok sokkal tobbet tud mint a bash...
alma=1
alma=`echo $alma + 0.1 | bc -ql`
- A hozzászóláshoz be kell jelentkezni
Olyan megoldás kellene, amit tudok úgy módosítani is, hogy:
x > 0.2 esetén a pozitiv++
-0.2 < x < 0.2 esetén a semleges++
x < -0.2 esetén a negatív++
- A hozzászóláshoz be kell jelentkezni
esetleg:
pozitiv=`expr $pozitiv + 1`
G.
P.S. Forrás: Büki András: UNIX/Linux héjprogramozás, Kiskapu Kiadó, Budapest, 2002, 15.-17. oldal
============================================
"Share what you know. Learn what you don't."
- A hozzászóláshoz be kell jelentkezni
sajna így sem, amúgy ezt is néztem már.
- A hozzászóláshoz be kell jelentkezni
man bash:
Pipelines
Each command in a pipeline is executed as a separate process (i.e., in a subshell).
Azaz cat miatt a while-ban használt változó lokális, ezért marad az értéke a ciklus előtt adott 0.
- A hozzászóláshoz be kell jelentkezni