Nowe posty

Autor Wątek: Dowiązywanie do konca pliku  (Przeczytany 3132 razy)

kubatur0

  • Gość
Dowiązywanie do konca pliku
« dnia: 2010-05-11, 15:22:51 »
Witam, mam pewien problem... otoz am funkcje awk ktora wczytuje pola $1,$2 i $5. Teraz mam funkcje liczaca srednia z wartosci ktore sa w polu $5. Kiedy tak jak wyzej wykorzystuje >>summary to mi sie dopisuje pod poprzednim textem, a chcialbym zeby wyswietlalo sie obok. Czy ktos moze wie jak rozwiazac ten problem ?

arctgx

  • Gość
Dowiązywanie do konca pliku
« Odpowiedź #1 dnia: 2010-05-11, 17:01:15 »
Może bardziej precyzyjnie napisałbyś. Nie wiem jak reszcie czytających, ale mi trudno wyobrazić sobie, obok czego chcesz postawić wynik (tzn. czym jest ten poprzedni tekst).

kubatur0

  • Gość
Dowiązywanie do konca pliku
« Odpowiedź #2 dnia: 2010-05-11, 18:05:00 »
tzn tak.. wyswietla mi
Imie nazwisko            ID         Nick         "i tu chcialbym zeby wyswietalalo wartosc sredniej"

Imie nazwisko, ID i nick sa z jednej fuinkcji:
cat mainlist | awk -F";" '{print $1"\\t\\t"$2"\\t\\t"$5}' > summary
i dalej mam funkcje ktora dzieli $5 (wartosci sa oddzielone przecinkami) i robi z nich srednia

cat mainlist | awk -F";" '{split ($5,marks,","); n=0; sum=0; for (n in marks){
sum+=marks[n]
n++
}
n--
print suma/n}' >> summary
i to co przed chwila zapisalem wyswietla sie w drugiej linijce pod Imie nazwisko   ID   Nick, a chcialbym zeby wyswietlalo sie tak jak napisalem na samej gorze:)


Problem udalo mi sie rozwiazac naokolo... zostawilem tak jak bylo i pod uzytkownikiem wyswietlam srednia. Dzieki za pomoc

___________
arctgx: BBCode

arctgx

  • Gość
Dowiązywanie do konca pliku
« Odpowiedź #3 dnia: 2010-05-11, 23:49:54 »
Zniknąłem na kilka godzin, zapominając się wylogować.

OK, dopiero po podpowiedzi łapię, że pole $5 składa się z liczbowych podpól oddzielonych przecinkiem i chciałeś w miejsce $5 dać średnią z wartości tych podpól.
function av(marks)
{
sum=0
for (i in marks)
{
sum+=marks[i]
}
return sum/length(marks)
}
# główny kod dla (każdej) linii
{
split($5,marks,",")
print $1, $2, $3, $4, av(marks)
}
Wygodnie wpakować go w plik i dać awkowi opcję -f. Podobnie, cat jest zbędny:
awk -f plik_z_kodem mainlist