Szkriptek: Python, Perl, Bash, ...

bash számlálás/összeadás [megoldva]

Sziasztok!

Az alábbi szkriptet írtam arra, hogy megszámoljam, hogy egy fájlban, amelynek minden sorában egy nem feltéten egész szám van, hány 0-tól nagyobb, ill 0-tól kisebb szám van. A fájl nem mindig ugyanannyi sorból áll.

A probléma az, hogy mindig 0-t kapok holott legalább 20 nem null szám van.
A pozitiv=$(( $pozitiv+1 )) értékadásnál van a baj. Ha 1-est írok ki ehelyett, akkor azok száma rendben van.


#!/bin/bash

pozitiv=0
negativ=0

cat $1 | while read
do
    korte=$REPLY

    if [[ $korte > 0 ]]
    then
	pozitiv=$(( $pozitiv+1 ))
    else
        negativ=$(( $negativ+1 ))
    fi
done

echo $pozitiv



awk mezők maximális száma

Hallo,

Van egy tabulátorral tagolt szöveges logom rsync lefutása után, ebből szeretnék adatokat bányászni.

6 oszlop/mező van, a hatodik az átvitt fájl neve ami viszont néha tartalmazhat szóközt is.

Ha van bent szóköz akkor a $6 ra az awk csak az első szóközik ad vissza a fájl nevéből. Perl esetén a split nél van rá lehetőség a mezők maximalizálására, az általam használt awk a -mf opciót nem ismeri.

Kérdés lehet-e egyszerűen rávenni az awk-t hogy csak 6 mezőre bontsa az adott sort.

Másik, hol tudnám megadni hogy a rendszer által generált levelek (főként cron) milyen feladó email-címet használjon. Forwardolni szeretnem a leveleket külső emailcímre, de a nem létező email címről érkező leveleket a levélszerverek kidobják.

Köszi a válaszokat
Meng

[megoldva] python daemon: signal megszakítja a hálózati kapcsolatot

Csináltam egy hálózatos daemont pythonban, teszi a dolgát, start, stop működik.
Reload-ot szeretnék csinálni úgy hogy küldök neki valami signalt.
Ha egyszer küldöm, rendben van, újraolvassa, lehet újra csatlakozni s utána is működik a reload.

De ha egymás után kétszer küldök neki signalt, akkor mindig szétkapcsolja a hálózatot. Vázlatosan:


def reload (a=None, b=None): print 'RELOAD OK'

signal.signal(signal.SIGHUP, reload)
...
while 1:
    clientsock, clientaddr = s.accept()

$ kill -HUP pid
RELOAD OK
$ kill -HUP pid
RELOAD OK
...
    clientsock, clientaddr = s.accept()
  File "/usr/lib/python2.4/socket.py", line 161, in accept
    sock, addr = self._sock.accept()
socket.error: (4, 'Interrupted system call') 

Van-e valami triviális megoldás ennek kiküszöbölésére?

(Mostani workaround: try, majd except-ben shutdown és újra socket létrehozás.)

szaszi

Eratoszthenész szitája - Python

Sziasztok!
Most kezdek ismerkedni a Python programozasi nyelvvel (es a programozassal, ugy altalaban).
El tudna nekem valaki magyarazni,h az alabbi pici program miert es hogyan mukodik?
Egyszeruen nem ertem,h hogyan törli ki a szamok többszöröseit.
A segitseget elore is köszönöm.
(bocsi,h nincsenek ekezetek. nemet billentyuzetrol gepelek.)


# Calculate all the primes below 1000
result = [1]
candidates = range(3,1000)
base = 2
product = base
while candidates:
    while product < 1000:
        if product in candidates:
            candidates.remove(product)
        product = product+base
    result.append(base)
    base = candidates[0]
    product = base
    del candidates[0]
result.append(base)
print result

forras: http://hetland.org/writing/instant-hacking.html

Paraméter lista - állományból -- megoldva

Van nekem egy DFL-800 routerem,
amit soros porton (is) fel lehet okosítani
- ms-dos alól remekül megy, batch-script használatával.
Most a linuxos kiszolgálóról tenném ugyanezt,
ehhez kérek valami segítséget.

Van egy

geplista

állományom:


; megjegyzés sor
gepneve1  fix-ipcim1   mac-address1
gepneve2  fix-ipcim2   mac-address2

sorokkal

A működő batch script a következő:


rem ha nincs meghatározva, a default állomány a cél
set _alladdrout=CLI_txt/all-addr.txt
if "%1"=="" goto jump
rem de persze másnéven is elmenthetem az eredményt
set _alladdrout=%1

:jump
rem ha van ilyen állomány törlöm
if exist %_alladdrout% del %_alladdrout%

rem megjegyzés sor kiejtve
rem három paraméter érdekel a geplista-ból
rem vesszővel vagy szünettel elválasztva

FOR /F "eol=; tokens=1,2,3 delims=, " \
   %%i IN (geplista) DO add_lan_gep.bat \
      %_alladdrout% %%i %%j %%k

rem környezeti változó törlése
set _alladdrout=

Speciel a "FOR" kezdetű sor, bash-scriptes (perl nélküli) megvalósítása a problémám.

Cipelem én a saját köteg rőzsémet, csak nem szeretnék napestig az erdőben bolyongani - vagyis:
Sejtem, hogy for, csővezeték, grep, awk, talán function()\{} de valami biztosat szeretnék tudni.

:-)

Shell szkript /awk,sed,grep

B) Skript stats.sh

A szkript az ertekeles statisztikajat generalja. Az automatikus bemeneti fajl a hodnoceni.txt. AZ ertekeles skalazva van 5 pontonkent: 0-4pontig, 5-9pontig, 10-14pontig, es igy tovabb. A vegere kinyomtatja az atlagot, ezt tort formaban, h ne lepjen fel problema a tizedes szamokkal. A szkript minden varianst kulon dolgoz fel, minden varians statisztikajat kulon fajlba menti el.A fajl neve ugyanaz mint a varians neve es mindig kis betuvel (a-z ig, a variansok is ezek lehetnek). Ezek a fajlok automatikusan a stats nevu mappaba generalodnak.

Kimenet:

0-4 : 1
5-9 : 0
10-14 : 2
Atlag : 26/3

A helykoz szama a bemeneti es kimeneti fajloknal lenyegtelen, a varians betunagysaga lenyegtelen (a es A ugyanazt jelenti). A skala az adott ertekig nyomtatodik ki, tehat ha a legnagyobb ertek 32 akk az utolso kinyomtatott intervallum 30-34ig lesz.

A szkript hasznalata es a lehetseges modositasok(argumentek):

stats.sh [-g] [-o dir] [-h hod] [-v var]

* -o dir ... a fajlokat ne a stats mappaba mentse hanem mashova (dir -te adod meg)
* -h hod ... a bemeneti fajl mas mint a hodnoceni.txt (hod -te adod meg)
* -v var ... a feltuntetett variansokra csinalja csak meg (var -te adod meg), regularis kifejezes is lehet,
(ABD) vagy (A-C). Pl:

./stats.sh -v A-C ha pl a C varianshoz nem tartozik ertek akk a fajl sem jon letre, csak a,b.
./stats.sh -v abd

A kimenet formatumanak megvaltoztatasa, a szam helyett h hany diak erte el az adott pontszamot, a megfelelo jel fog kinyomtatodni.
kimenetre pl:

0-4 : =
5-9 :
10-14 : ==
Atlag : 26/3

A szkript kidolgozasanak feltetelei:
A szkriptet a shellben hozzuk letre a kovetkezo programok segitsegevel: cat, grep, sed, awk, sort, uniq, cut. Lehet hasznalni a BASH built-in parancsait is(mkdir, tr, let, read, tail, head, cd, wc). Ne hasznaljon ideiglenes fajlokat! Az argumentek sorrendje valtozhat!

Egy ilyen fajlra kellene hasznalni pl:
xadame17;C;3;bla bla bla
xadamc00;A;20; fdjhfjdshjs
xadame15;A;26; fdk fhdjs dfhja f
xadame17;A;27; fjdkja hfdj hfdj jf
xadame16;A;30; fhdjhfjd hfdj jdfh jas
xadamc00;B;16; hfdjshfdjs jds ajfhdaj jfd
xaloma00;A;19; fhdjshf fdjah fjdjas fhdjas
xadame17;B;2; fhdjhfj fjdha j jfdah fjdas hfj a

Nem kerem a program megoldasat! a Shell programozassal nemreg ismerkedtem meg. Szeretnek kerni vmi tampontot, egy kis segitseget, h h is erhetem el ezeket a dolgokat h megoldasra keruljenek. a segitseget elore is koszonom.

Példa:

Van alapesetben a hodnoceni.txt fajl. Ezt a fajlt kell feldolgoznunk, alapesetben kikell nyerni a pontok szamat, es h melyik varianshoz tartozik. Minden variansnak kell csinalni egy kulonfajlt ami alapesetben a stats mappaba mentse el. A fajlok nevei kisbetuvel. Es az adott fajlba 5 pontonkent szet kell irni a pontokat es Atlagot kell belole csinalni tort formaban.

Bemutató példa

ha pl igy akarom futtatni a scriptet, h ./stats.sh
akk lenne a stats mappaban 3fajl (a,b,c).
es a "c" fajl igy nezne ki : 0-4 : 1
Atlag : 3/1
mivel a megadott fajlban csak egy C varians van.
a "b" fajl igy nezne ki: 0-4 : 1
5-9 :
10-14 :
15-19 : 1
Atlag : 18/2

Aztan ha argumenttel hivom meg akk a fent emlitett dolgok alapjan lehet allitani: pl ./stats.sh ABCD akk csak ezeket a variansokat keresi es a hozzatartozo pontokat. Ha vmelyik varianshoz nem talal erteket akk a fajl nem jon letre, jelen esetben a D varianshoz nem fog tartozni a "d" fajl.

Argumenttel meglehet adni meg a bemeneti fajlt, es a kimeneti alkonyvtart is, es azt h a szamok helyett a szetirasban = jel legyen.

python, xmlrpc - method hivasa valtozobol

ismerkedem a python nyelvvel egy xml-rpc related feladat kapcsan. a kovetkezot probalom megvalositani: egy valtozoban eltarolok egy metodusnevet, amit hivni szeretnek az xml-rpc szerveren, majd ezt a valtozot felhasznalva probalom hivni. kb olyasmi fuggvenyt keresek, mint a php call_user_func fuggvenye.

pelda:

method = 'node.load'
print server.system.method

az utolso sor nyilvan rossz, csak az pelda kedveert irtam igy.

tcp/udp "képességek" bash-ben

Kedves Fórumozók!

Érdekes cikket mutattak nekem a minap itt.

Nekem sajnos nem megy a következő kódrészlet:


#!/bin/bash

headers() {
        server=$1; port=${2:-80}
        exec 5<> /dev/tcp/$server/$port
        echo -e "HEAD / HTTP/1.0\nHost: ${server}\n\n" >&5
        cat <5
        exec 5<&-
    }

headers "index.hu"

Ezt mondja:


janos@janos_mobile:~/Development/sh$ ./header.sh
./header.sh: line 8: 5: Nincs ilyen fájl vagy könyvtár
janos@janos_mobile:~/Development/sh$  

Valakinek esetleg meg tudná mondani, hogy mi miatt hasal el?
Előre is köszönöm!

Üdv:
János