Szkriptek: Python, Perl, Bash, ...

[megoldva] logaritmikus keresés - grep (neve: look)

Rá lehet venni a grep-et (vagy más parancssori szövegpásztázót), hogy logaritmikus kereséssel rágjon át egy nagyobb fájlt?
Egy sor eleji számra szeretnék keresni ^.... módon; a fájl pedig rendezett. Szeretném ezt az infót átadni a grepnek, hogy gyorsabban végezzen.

[megoldva] Párhuzamos folyamat indítása és bevárása

Szeretnék úgy elindítani egy folyamatot egy szkriptből, hogy az a háttérben fusson; és mire a szkript egy későbbi pontjára jut el az értelmező, addigra lehetőség szerint lefusson. Ez a "lehetőség szerint" teszi érdekessé az ügyet; azt szeretném, hogy ha a szkript egy adott pontján be lehetne várni a háttérfolyamatot.

Tehát valami ilyesmi kellene; esetleg a másolás végeztét fájlméretek összehasonlításával ellenőrizzem? Vagy van általánosabb módszer?

cp gigafajl gigafajl2 &
...
... (egyéb időigényes műveletek)
...
while test VÉGZETT_E_MÁR_A_MÁSOLÁS ;do sleep 1; done
további utasítások

[megoldva] Átlagolás shell scriptből, awk?

Addott a következő probléma:

http://pastebin.com/dT6Kh1La

bonnie outputból csinálok ilyesmit, többszörös futás átlagát kéne számolni oszloponként és fájlrendszerenként. Azaz kéne a reiserfs-hez tartozó oszlopok átlaga és a xfs-hez (meg persze a többihez).

Annyi könnyebbség(?) van, hogy több fájlból gyártom le ezt az outputot, azaz a különböző fájlrendszerek (és futások) adatai klüön-külön is megvannak.

Signal kezelés

Írtam egy bash scriptet, amiben tetten signal kezelést a ctrl+c -re INT signal.
Ha az én felhasználómé a file, akkor működik, ha más felhasználó futtatja akkor nem. Rendben lefut, de a signal kezelés nem működik.
Mi lehet ennek az oka?

[megoldva] split ciklus

Egy olyan kódrészletre (ciklusra) vágyom, amely lehetővé tenné, hogy egy nagy fájl elejéből különböző méretű szeleteket vágjak le split-tel. (Az óriási fájlméret miatt lehetőleg nem a head-et szeretném használni.)

Eredetileg ilyen volt a program; aztán rájöttem, hogy ez rossz, mert a $sorkellene csak az első szelet leválasztásakor aktuális (a második szelethez már más szám lenne helyes)... A szamoldki_mennyi_kell egy awk kódrészlet (http://hup.hu/node/100148), amely kiszámítja az aktuális "nagy fájl" elejéből leválasztandó sorok számát -- ez több milliós nagyságrendű érték.


sorkellene=$(szamoldki_mennyi_kell)

split -d -l $sorkellene ebbol "ilyeneket_"

for i in $(ls ilyeneket_*); do
#feldolgozas...
done

Íme:
http://pastebin.com/4w97TVXh és http://pastebin.com/Jq9Y3Zd9

sort -u

Gyakran használtam eddig a sort|uniq parancspárt, míg egy hatalmas fájlnál el nem jutottam teljesítőképességnek határára (vagyis használatakor betelt a (nem kicsi) merevlemezem). Ekkor találtam ezt az oldalt, ami rámutat, hogy mennyivel jobb a fenti helyett inkább a sort -u parancsot használni: http://aplawrence.com/Unixart/sort-vs-uniq.html - A sort -u valóban létre tudta hozni a kívánt 110MB-os szövegfájlt.

Ha tudtok olyasféle trükk-gyűjteményről a weben, amivel (a fenti tényhez hasonlóan) érdemes szembesülni, írjátok meg!

[megoldva] pys60 ékezetek

Sziasztok!
Kis segítséget kérnék...
Hogyan kell ékezetet kezelni pys60-ban?
(u"Üdvözöllek! Írd be a neved:")
Így nem működik... Vagy az a probléma, hogy túl régi verziót használok?
1.4.0 final és Nokia 3650 a teszt alany. Köszi a segítséget

szerk.: rossz kódolásban mentettem, ISO-8859-1 -el már működik...

[megoldva] Spec. sorok eltüntetése szövegből

Van egy szövegfájlom, amiben szeretnék kiküszöbölni bizonyos sorokat,
mégpedig azokat, amelyek ugyanolyan hosszúak, mint a rákövetkező sor,
és ha összehasonlítjuk a karaktereket, akkor a megegyező karakterek éppen az első sort adják.
A meg nem egyező karakterek helyett pedig képzeljünk oda _-t.

Tehát pl. ebből szeretném nyerni a lentebbi fájlt:


07130 | 01286:DGWN;01730:DAWI;70267:DGWN;
07130 | 01286:DGWN;01730:DAWI;70267:DGWN;70375:DGWN;
90107(VMI) | 23000:____;13021:____;
90107(VMI) | 23000:EZA_;13021:DGW1;
VALAMI | AKARMI
VALAMA | AKARMI


07130 | 01286:DGWN;01730:DAWI;70267:DGWN;
07130 | 01286:DGWN;01730:DAWI;70267:DGWN;70375:DGWN;
90107(VMI) | 23000:EZA_;13021:DGW1;
VALAMI | AKARMI
VALAMA | AKARMI

PHP szkripttel meg tudom oldani, de valami elegánsabbra vágyom.

pipe buffer ?

Sziasztok,
írtam egy kis shell scriptete, ami bekapcsolja set -x -el a shell "debug"-ot, majd fork-ol egy process-t ami kiválogatja a -x kimenetét az STDERR-ről és egy fáljba teszi...

A kód:

debug.sh

#!/bin/bash

function debug_on()
{
mkfifo _in.$$
sepa _in.$$ $1 &
DEBUGGER_PID=$!
exec 3>&2
exec 2>_in.$$
set -x
}

function debug_off()
{
## SET OFF
set +x
exec 2>&3
exec 3>&-
rm _in.$$
wait $DEBUGGER_PID
}

### SET ON
function sepa()
{
echo " ======= `date` ======= " >> $2
while [ -e $1 ] ; do
line=`cat $1 2>/dev/null`
echo "$line" | grep -v '^+' >&2
echo "$line" | grep '^+' >> $2
done
}

és a teszt script amiből ezt meghívom:

#!/bin/bash

source debug.sh

debug_on 'test.log'

for i in `seq 1 10` ; do
echo "out $i"
echo "err $i">&2
done

debug_off

Na már most a gondom a következő:

output:

out 1
out 2
out 3
out 4
out 5
out 6
out 7
out 8
out 9
out 10
err 1
err 2
err 3
err 4
err 5
err 6
err 7
err 8
err 9
err 10

Tehát úgy fest, hogy a pipe, valahogy bufferelt, és nem kerül bele az adat adott idő előtt... A lehető legjobb megoldás az lenne, ha:

a, a set -x tud fáljba írni, csak én nem találtam sehol
b, a kimenete úgy nézne ki: out1 err1 out2 ....

Előre is köszönöm, ha megtetszett a kód és még ki is javítjuk, akkor feel free to use :)

Amit már probáltam, egy jó kis sleep a ciklusba a teszt programba, sajna nem segít, tehát nem az történik, hogy a forkolt processz nem kap időt... meg hát úgy lenne az igazi, ha a teszelt kódba csak a debug_on és debug off kerülne, késöbb úgy tervezem módosítani, hogy csak akkor debug-oljon ha egy rendszer változót beállítok...