Freesco, NND, CDN, EOS
http://forum.freesco.pl./

Pomoc przy skrypcie w bash'u
http://forum.freesco.pl./viewtopic.php?f=34&t=16684
Strona 1 z 2

Autor:  Albercik [ niedziela, 16 marca 2008, 15:28 ]
Tytuł:  Pomoc przy skrypcie w bash'u

Nie mogę poradzić sobie z takim oto problemem :
jest sobie plik tekstowy (log), w którym zapisywane są regularne dane. Muszę napisać skrypt, który
1) pobierze 1 linię z loga
2) wykona odpowiednie porównania (to już mam - poniżej)
n) i tak dalej, linia po linii

Do czego doszedłem:

: [/] [] ()
mac_kl=`echo "$linia" | grep -w Connected | awk '{print $3}' `
ip_kl=`echo "$linia" | grep -w remote | awk '{print $4}'`


$linia to zmienna do której muszę podstawić każdą linijkę logu.
Jak wyciągnąć linię po linii i każdą z nich podstawić do zmiennej ?

Autor:  zciech [ niedziela, 16 marca 2008, 16:53 ]
Tytuł: 

zobacz sobie w skryptach:
http://ww2.devel-nnd.brb.pl/nnd/pakiety ... pkg.tar.gz
http://ww2.devel-nnd.brb.pl/nnd/pakiety ... pkg.tar.gz
http://ww2.devel-nnd.brb.pl/nnd/pakiety ... pkg.tar.gz

Autor:  Albercik [ niedziela, 16 marca 2008, 22:53 ]
Tytuł: 

zciech pisze:


Dzięki za wskazówkę , działa.

Autor:  Mis' [ poniedziałek, 17 marca 2008, 03:45 ]
Tytuł:  Re: Pomoc przy skrypcie w bash'u

Albercik pisze:
: [/] [] ()
mac_kl=`echo "$linia" | grep -w Connected | awk '{print $3}' `
ip_kl=`echo "$linia" | grep -w remote | awk '{print $4}'`



Procesor Ci się nudzi i chcesz go czymś zająć?

mac_kl=`echo "$linia" | awk '/Connected / {print $3}' `
ip_kl=`echo "$linia" | awk '/ remote / {print $4}'`

awk doskonale sobie radzi bez pomocy grepa. Nie pamiętam teraz czy ma odpowiednik opcji '-w' ale nawet jeśli nie to łatwo to zrobić dodając spacje (tabulatory, znaki nowej linii czy co tam jest potrzebne) wokół poszukiwanego wzorca.

Co do głównego pytania - tak wygląda ogólna konstrukcja wczytująca do zmiennej line kolejno wszystkie linie z pliku


while read line; do
#tu robisz to co chcesz ze zienną $line
done < /sciezka/plik

Autor:  barte-k [ środa, 19 marca 2008, 14:19 ]
Tytuł: 

Hejka, przepraszam ze sie podpinam ;-) ale mam problemik mały
Potzrebuję w bashu napisać skrypt, który z kodu html wyciągnął by dane.
Kod jest prosty:
<tr><td>Xyz Yzx</td><td>Zyx</td><td style="color: green">12:34</td></tr>
Chodzi o to by zostało:
Xyz Yzx Zyx 12:34

Maltertuje wlasnie grepy, sedy, awk -- opornie idzie...

Wszelkie wskazówki mile widziane, dzięki.

Dzieki
: [/] [] ()
sed -e 's/<[^>]*>/ /g' mojplik.html

Autor:  Albercik [ środa, 26 marca 2008, 18:18 ]
Tytuł: 

Podepnę się, aby nie zaczynać znów podobnego tematu. Potrzebuję znó pomocy, z pliku tekstowego wyciągam poszczególne kolumny poleceniem "cut".
: [/] [] ()
cut -f 1,2,3,5,7  przelewy.tmp >> przelewy.txt


ale chciałbym, aby w wynikowym pliku kolumna 2 i 3 były zamienione, mianowicie:
: [/] [] ()
cut -f 1,3,2,5,7  przelewy.tmp >> przelewy.txt


ale niestety to nie działa. Znacie jakiś prosty sposób na to?

Autor:  viater [ środa, 26 marca 2008, 18:37 ]
Tytuł: 

: [/] [] ()
awk '{print $1,$3,$2,$5,$7}' przelewy.tmp >> przelewy.txt


awk - iem da się prawie wszystko.

TUTAJ jest dobrze opisane.

Autor:  Albercik [ środa, 26 marca 2008, 19:03 ]
Tytuł: 

viater pisze:
: [/] [] ()
awk '{print $1,$3,$2,$5,$7}' przelewy.tmp >> przelewy.txt


awk - iem da się prawie wszystko.

TUTAJ jest dobrze opisane.


Jest prawie dobrze, ale kolumny muszą być odseparowane tabulatorami, nie spacjami.

Autor:  viater [ środa, 26 marca 2008, 19:31 ]
Tytuł: 

Albercik pisze:
Jest prawie dobrze, ale kolumny muszą być odseparowane tabulatorami, nie spacjami.

Nie ma problemu :)
: [/] [] ()
awk '{OFS="\t"} {print $1,$3,$2,$5,$7}' przelewy.tmp >> przelewy.txt

Można też tak:
: [/] [] ()
awk '{print $1"\t"$3"\t"$2"\t"$5"\t"$7}' przelewy.tmp >> przelewy.txt

ale pierwsza wersja ładniej mi wygląda.

Autor:  Albercik [ środa, 26 marca 2008, 22:05 ]
Tytuł: 

viater pisze:
Albercik pisze:
Jest prawie dobrze, ale kolumny muszą być odseparowane tabulatorami, nie spacjami.

Nie ma problemu :)
: [/] [] ()
awk '{OFS="\t"} {print $1,$3,$2,$5,$7}' przelewy.tmp >> przelewy.txt

Można też tak:
: [/] [] ()
awk '{print $1"\t"$3"\t"$2"\t"$5"\t"$7}' przelewy.tmp >> przelewy.txt

ale pierwsza wersja ładniej mi wygląda.


Zostało tylko jedno, aby sam AWK nie reagował na spacje w tekście tylko tabulatory. :wink:

--EDIT--

Sprawa rozwiązana:
: [/] [] ()
awk -F "\t" '{OFS="\t"} {print $1,$5,$3,$7}' przelewy.tmp >> przelewy.txt

Autor:  viater [ czwartek, 27 marca 2008, 00:34 ]
Tytuł: 

Albercik pisze:
Zostało tylko jedno, aby sam AWK nie reagował na spacje w tekście tylko tabulatory. :wink:

Chciałoby się napisać: "RTFM", tym bardziej, że dałem linka ;)
A jednak:
Albercik pisze:
--EDIT--

Sprawa rozwiązana:
: [/] [] ()
awk -F "\t" '{OFS="\t"} {print $1,$5,$3,$7}' przelewy.tmp >> przelewy.txt

Czyli widzę, że jednak link się przydał ;)

Autor:  Albercik [ czwartek, 27 marca 2008, 00:42 ]
Tytuł: 

viater pisze:
Czyli widzę, że jednak link się przydał ;)


Ależ oczywiście :wink: i bardzo dziękuję.

Autor:  Albercik [ niedziela, 30 marca 2008, 21:15 ]
Tytuł: 

Następny problem ze skryptem. Potrzebuję pomocy, mianowicie: jest plik tekstowy, który zawiera jakiś ciąg znaków np "ąść" , chciałbym przepisać ten plik zastępując wszystkie ciągi "ąść" na "asc" . Da się?

Autor:  JakubC [ niedziela, 30 marca 2008, 21:27 ]
Tytuł: 

Da się, użyj programu tr .

Autor:  viater [ niedziela, 30 marca 2008, 22:47 ]
Tytuł: 

Albo sed

Autor:  Albercik [ niedziela, 30 marca 2008, 23:31 ]
Tytuł: 

viater pisze:
Albo sed


Dziękuję bardzo. Oczywiście podpowiedź znów trafiona. Jeśli ktoś chciałby to podam przykład - zamiana ę na e:
: [/] [] ()
sed -e 's/ę/e/g' plik > nowy-plik

Autor:  viater [ poniedziałek, 31 marca 2008, 00:04 ]
Tytuł: 

Albercik pisze:
viater pisze:
Albo sed


Dziękuję bardzo.

... ma za co ;)
Albercik pisze:
Jeśli ktoś chciałby to podam przykład - zamiana ę na e:
: [/] [] ()
sed -e 's/ę/e/g' plik > nowy-plik

A jeśli chcemy zrobić zmianę "w miejscu", czyli wynik zmiany zachować w tym samym pliku, to robimy:
: [/] [] ()
sed -i -e 's/ę/e/g' plik

Autor:  Albercik [ poniedziałek, 31 marca 2008, 00:59 ]
Tytuł: 

Cytuj:
sed -i -e 's/ę/e/g' plik


A co jeśli chcemy nie jeden a kilka znaków zamienić?

Autor:  viater [ poniedziałek, 31 marca 2008, 01:08 ]
Tytuł: 

Albercik pisze:
Cytuj:
sed -i -e 's/ę/e/g' plik


A co jeśli chcemy nie jeden a kilka znaków zamienić?

Na przykład ?

Autor:  Albercik [ poniedziałek, 31 marca 2008, 01:14 ]
Tytuł: 

viater pisze:
Albercik pisze:
Cytuj:
sed -i -e 's/ę/e/g' plik


A co jeśli chcemy nie jeden a kilka znaków zamienić?

Na przykład ?


chcę ę na e , ć na c , ź na z itd....

Strona 1 z 2 Strefa czasowa UTC+2godz.
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/