Nowe posty

Autor Wątek: brak sterowników do RAID VIA VT6410  (Przeczytany 14560 razy)

klimat

  • Gość
brak sterowników do RAID VIA VT6410
« dnia: 2005-05-23, 15:34:15 »
Jak moge dodac liczby w kolumnie.np

32 1254
32 35
34 344
31 4


i chce zsumowac druga kolumne, jak to moge zrobic?
Aha i zeby pomijal inne znaki np takie jak /\\';a!% itp

z gory dziekuje za odpowiedz

xis

  • Gość
brak sterowników do RAID VIA VT6410
« Odpowiedź #1 dnia: 2005-05-23, 17:06:39 »
2005-05-23 15:34:15 klimat napisał:

> Jak moge dodac liczby w kolumnie.np
 >
 > 32 1254
 > 32 35
 > 34 344
 > 31 4
 >
 >
 > i chce zsumowac druga kolumne, jak to moge zrobic?
 > Aha i zeby pomijal inne znaki np takie jak /\\';a!% itp
 >
 > z gory dziekuje za odpowiedz

Zeby pobrać akurat drugą linię pliku możesz posłużyć się komendami tail i head. Do zsumowania kolumn polecam awk.
Czyli coś np. takiego:

head -n 2 plik.txt | tail -n 1 | awk \\'{ print $1+$2 }\\'

Ta kombinacja head i tail nie wygląda najszczęśliwiej, ale w sumie nie miałem innego pomysłu.
Nie za bardzo rozumiem o co chodzi Ci z tymi niepotrzebnymi znakami.

Polecam:
man tail
man head
man awk

de_laurent

  • Gość
brak sterowników do RAID VIA VT6410
« Odpowiedź #2 dnia: 2005-05-23, 17:09:57 »
2005-05-23 15:34:15 klimat napisał:

> Jak moge dodac liczby w kolumnie.np
 >
 > 32 1254
 > 32 35
 > 34 344
 > 31 4
 >
 >
 > i chce zsumowac druga kolumne, jak to moge zrobic?
 > Aha i zeby pomijal inne znaki np takie jak /\\';a!% itp
 >
 > z gory dziekuje za odpowiedz

Tutaj na pewno znajdziesz odpowiedz:
http://www.matematyka.pl/

klimat

  • Gość
brak sterowników do RAID VIA VT6410
« Odpowiedź #3 dnia: 2005-05-23, 17:37:01 »
head -n 2 plik.txt | tail -n 1 | awk \\'{ print $1+$2 }\\'

To jest zle bo dodaje mi linie poziomo a ja potrzebuje policzyc linie ale w PIONIE. Pomozcie



xis

  • Gość
brak sterowników do RAID VIA VT6410
« Odpowiedź #4 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ść
brak sterowników do RAID VIA VT6410
« Odpowiedź #5 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ść
brak sterowników do RAID VIA VT6410
« Odpowiedź #6 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ść
brak sterowników do RAID VIA VT6410
« Odpowiedź #7 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ść
brak sterowników do RAID VIA VT6410
« Odpowiedź #8 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ść
brak sterowników do RAID VIA VT6410
« Odpowiedź #9 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ść
brak sterowników do RAID VIA VT6410
« Odpowiedź #10 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ść
brak sterowników do RAID VIA VT6410
« Odpowiedź #11 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ść
brak sterowników do RAID VIA VT6410
« Odpowiedź #12 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ść
brak sterowników do RAID VIA VT6410
« Odpowiedź #13 dnia: 2005-05-24, 15:01:13 »
Micu wielkie dzieki :)

jakwos

  • Gość
brak sterowników do RAID VIA VT6410
« Odpowiedź #14 dnia: 2005-05-23, 14:14:57 »
Witam

Chcialem zainstalowac linuxa (najlepiej Debian) na kompie z plyta Gigabyte z wbudowanym RAIDem VIA VT6410 ver 2.11, ale potrzebuje sterownikow. Czy ktos juz sie spotakl z tym chipsetem??

z gory dziekuje za pomoc.