bash számlálás/összeadás [megoldva]

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



Hozzászólások

próbáld meg így:

pozitiv=$((pozitiv+1))

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`

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."

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.