Strona 1 z 1

[bash]logowania w html

: 03 cze 2009, 14:41
autor: Najki0024
Witam muszę napisać skrypt: Przygotować skrypt, który będzie generował stronę HTML w tabeli przedstawi login użytkownika, imię i nazwisko oraz max 3 daty ostatnich logowań. Jeżeli użytkownik logował się tylko 3 razy, to pozostałe okienka tabeli pozostaną puste.
Imię Nazwisko login logowanie 1 logowanie 2 logowanie 3
Jas Fasola jasiek 2009-02-10 2009-03-04 2009-04-13
Anna Miś annam 2008-12-12 2009-03-03 2009-05-15
Adam Ptyś adam 2009-05-25
Jak wynika z powyższej tabeli adam logował się tylko raz na serwerze.
Jeżeli dana osoba nigdy nie logowała się na serwerze, to tez powinna się znaleźć w tabelce, ale z pustymi kolumnami od 4 do 6 włącznie. Jeżeli ktoś się logował na serwerze 3 razy to wszystkie jego logowania powinny znaleźć się w tabeli. Jeżeli natomiast logował się na serwerze wielokrotnie, to w tabeli powinny znaleźć się tylko jego ostatnie 3 logowania.

Napisałem już plik html.txt

Kod: Zaznacz cały

<table BORDER="single" FRAME="box" STYLE="box">
   <tr><td>Imie</td><td>Nazwisko</td><td>login</td><td>Logowanie1</td><td>Logowanie2</td><td>Logoanie3</td></tr>
   <tr><td>Im1</td><td>Naz1</td><td>log1</td><td>l11</td><td>l12</td><td>l13</td></tr>
   <tr><td>Im2</td><td>Naz2</td><td>log2</td><td>l21</td><td>l22</td><td>l23</td></tr>
   <tr><td>Im3</td><td>Naz3</td><td>log3</td><td>l31</td><td>l32</td><td>l33</td></tr>
 </table>



Jak narazie kod skryptu to:

Kod: Zaznacz cały

#!/bin/bash

clear
cat html.txt > logowania.html


Później chciałbym komendą sed pozamieniać słowa im1, im2, l11, l22, ... na zmienne na których będą zapisane odpoiednie wartości i tu pojawia się problem. Po wpisaniu komendy last | tail -3 wyświetla mi się cała linia tekstu:

Kod: Zaznacz cały

najki    pts/0        :0.0             Wed Jun  3 14:33   still logged in  
Jak rozdzelić tą linie na kilka zmiennych, chodzi mi tu o to aby np. $log1=najki $l11=Wed Jun 3 14:33 itp.

Odp: [bash]logowania w html

: 03 cze 2009, 15:02
autor: terrapin
zainteresuj sie czymś takim jak awk:

oto przyklad jego uzycia jakie potrzebujesz

plik file.txt wyglada tak:

Kod: Zaznacz cały

najki    pts/0        :0.0             Wed Jun  3 14:33   still logged in
w skrypcie piszesz:

Kod: Zaznacz cały

zmienna=`awk '{print $1}' file.txt`
echo $zmienna
wynik jego dzialania:

Kod: Zaznacz cały

najki

Odp: [bash]logowania w html

: 03 cze 2009, 16:46
autor: Najki0024
Wielkie dzięki;d

EDIT:
A jeszcze takie pytanie: poziomy text można rozbić wpisując parametry:

Kod: Zaznacz cały

zmienna=`awk '{print $1}' file.txt`
zmienna2=`awk '{print $2}' file.txt`
zmienna3=`awk '{print $3}' file.txt`
A pionowy??

Bo wszyscy ostatnio zalogowani użytkonicy są w jedej lini pod jednym parametrem(polkituser, haldaemon, najki):

Kod: Zaznacz cały

polkituser                                 **Nigdy nie zalogowany**
haldaemon                                  **Nigdy nie zalogowany**
najki            tty1                      wto maj 12 22:36:00 +0200 2009

Odp: [bash]logowania w html

: 03 cze 2009, 18:39
autor: terrapin
seda juz znasz, wiec chyba najprościej

Kod: Zaznacz cały

sed 'num!d' plik.txt
gdzie zamiast num wpisujesz numer wiersza ktory chcesz wczytać

Odp: [bash]logowania w html

: 03 cze 2009, 19:54
autor: beluosus
Też awk'iem, każde drukowanie tyczy się każdego wiersza, sprawdź np:

Kod: Zaznacz cały

last -10 | awk '{print $1}'
A jak chcesz w jednej linii to np:

Kod: Zaznacz cały

last -10 | awk '{print $1}' | tr '\n' ' '

Odp: [bash]logowania w html

: 03 cze 2009, 20:51
autor: Najki0024
Ok już wszystko działa, dzięki bardzo.