Nowe posty

Autor Wątek: Jak dodac liczby w kolumnie  (Przeczytany 17323 razy)

xis

  • Gość
Jak dodac liczby w kolumnie
« Odpowiedź #15 dnia: 2005-05-23, 17:41:04 »
Faktycznie, nie zrozumialem pytania :)

suma=0; for i in `cat plik.txt | awk '{ print $2 }' `; do [ -z `echo $i | egrep '^[0-9]$'` ] || suma=`expr $suma + $i`; done; echo $suma

Troche wyjasnien:
sume ustawiamy domyslnie na 0,
pozniej wyswietlamy plik linijka po linijce (for $i in `cat....`)
filtrujemy wyjscie, zeby dostac tylko druga kolumne (awk)
sprawdzamy, czy mamy liczbe ( [ -z .... egrep ....] || ....)
dodajemy jesli tak (expr)
krecimy lub konczymy petle (done)
wyswietlamy wynik (echo)

klimat

  • Gość
Jak dodac liczby w kolumnie
« Odpowiedź #16 dnia: 2005-05-23, 18:39:37 »
Kurde juz jest lepiej ale dalej nie dziala. Mysle i mysle i nie wiem co jest zle bo caly czas mi zwraca 0 :( nie wiem tylko dlaczego (to czy sprawdza czy znak jest liczba to juz nie jest takie wazne byle dodalo). Z gory wielkie dzieki ze chcesz wogule mi pomoc

xis

  • Gość
Jak dodac liczby w kolumnie
« Odpowiedź #17 dnia: 2005-05-23, 18:50:05 »
2005-05-23 18:39:37 klimat napisał:

> Kurde juz jest lepiej ale dalej nie dziala. Mysle i mysle i nie wiem co jest zle bo caly czas mi
 > zwraca 0 :( nie wiem tylko dlaczego (to czy sprawdza czy znak jest liczba to juz nie jest takie
 > wazne byle dodalo). Z gory wielkie dzieki ze chcesz wogule mi pomoc

^[0-9]$  -- zamień to na ^[0-9]*$'

Polecenie sprawdzało, czy wartośc w kolumnie jest CYFRĄ, a teraz będzie sprawdzało czy jest liczbą.

klimat

  • Gość
Jak dodac liczby w kolumnie
« Odpowiedź #18 dnia: 2005-05-23, 19:01:01 »
hehe smieszna sytuacja wszystko pieknie dziala ale NIE DZIALA dodaje liczby typui 235 ale juz nie dodaje liczb 0.5 czy liczby 1.34 ;( normalnie do nerwicy mnie to doprowdzi. Koncowka skryptu mi zostalo musze tylko to dodac a nie wiem jak (zrozumiem jak juz nie bedzie chcialo ci sie odpisywac). moj nr gg jak bys chcial mi na gg mozesz zostawic wiadomosc 3572803

xis

  • Gość
Jak dodac liczby w kolumnie
« Odpowiedź #19 dnia: 2005-05-23, 19:40:56 »
Szkoda, że od razu nie powiedziałeś, że nie chodzi o liczby całkowite.
Niestety, expr w takim wypadku odpada, bo - o ile mi wiadomo - potrafi wykonywać tylko proste operacje arytmetyczne na liczbach całkowitych.

Wydaje mi się, że musisz posłużyć się czymś 'mocniejszym' niż bash (choć mogę się mylić, bo nie znam bash'a w 100%).
Proponuję wsadową wersję php, lub perla.
Ostatecznie możesz 'męczyć' awk np. tak:
suma=0;
for i in `cat plik.txt | awk '{ print $2 }' `; do
[ -z `echo "$i" | egrep '^[0-9]*[.,]*[0-9]*$'` ] ||
echo $i | awk -v s=$suma '{ print s+$1 }';
done;
echo $suma

Ale tu bardzo łatwo się 'machnąć' z utratą liczb za przecinkiem (ten przykład właśnie jest wadliwy) i w ogóle ciężko tu o jakąkolwiek czytelność.

W bashu niestety więcej nie pomogę :/

xis

  • Gość
Jak dodac liczby w kolumnie
« Odpowiedź #20 dnia: 2005-05-23, 19:48:42 »
Oczywiście znów literówka :)

suma=0;
for i in `cat plik.txt | awk '{ print $2 }' `; do
[ -z `echo "$i" | egrep '^[0-9]*[.,]*[0-9]*$'` ] ||
suma=`echo '' | awk -v s="$suma" -v i="$i" '{ print s+i }'`;
done;
echo $suma

Trochę koślawe, ale działa. Tzn nie wiem dlaczego ogranicza wynik do jednej liczby po przecinku.

Powodzenia w dalszym odkrywaniu

klimat

  • Gość
Jak dodac liczby w kolumnie
« Odpowiedź #21 dnia: 2005-05-23, 20:05:27 »
Niestety nie dziala chyba ide sie pochlastac i pociac ;( mecze to i w jedna strone i wdruga i zero nie moge tego dodac;( caly czas 0 i 0 i 0 porazka. POMOCY

micu

  • Gość
Jak dodac liczby w kolumnie
« Odpowiedź #22 dnia: 2005-05-24, 11:28:28 »
Witam!

Przy zalozeniu, ze plik DANE zawiera kolumny oddzielone spacjami (tak jak w Twoim przykladzie), sprobuj ponizszego polecenia:

awk '{for (i=0;i+=$(i+1) ; else continue ; MAXNF=NF>MAXNF?NF:MAXNF } END { for (i=0;i ; print}'  DANE

Wyswietla ono sumy dla dowolnej liczby kolumn w wierszach z pominieciem danych nie bedacych liczbami. Jak widzisz, AWK i wyrazenia regularne to potezne narzedzia.

Pozdrawiam
Micu

PS. Zakladam, ze dzialasz pod Linuksem i uzywasz GNU awk. Dla Solarisa zamiast 'awk' uzyj 'nawk'.

micu

  • Gość
Jak dodac liczby w kolumnie
« Odpowiedź #23 dnia: 2005-05-24, 12:10:08 »
Aha, dla liczb rzeczywistych bedzie tak:

nawk '{for (i=0;i+=$(i+1) ; MAXNF=NF>MAXNF?NF:MAXNF } END { for (i=0;i ; print}' DANE

Z wyrazenia regularnego (i konstrukcji if) mozna zrezygnowac, bo dla pol nie-numerycznych awk przyjmuje wartosc 0 (wygodne, nieprawdaz :-) ). Jesli za jakich powodow uparlbys sie na zapisanie wyrazenia regularnego, to zamiast wyrazenia opisujacego liczbe naturalna (w skladni 'if') z poprzedniego przykladu : /^[0-9]+$/ wpisz opis liczby rzeczywistej : /^[-|+]?[0-9]*[.]?[0-9]+$/ .

Pozdrawiam
Micu

klimat

  • Gość
Jak dodac liczby w kolumnie
« Odpowiedź #24 dnia: 2005-05-24, 15:01:13 »
Micu wielkie dzieki :)