( uid_4656 | 2014. 05. 05., h – 17:53 )

Erre van egy válaszom, amit szerintem senki nem fog szeretni.

A unix-szerű rendszereken általában igaz, hogy kétféleképpen tudsz megoldani dolgokat:

- kevéssé hatékony, de jól átlátható elemi műveletekkel
- hatékony kriszkraszokkal.

Egy nagyon egyszerű példa:

cat patterns.txt |grep -v ^# |while read pattern
do
cat text.txt |grep $pattern
done |sort |uniq

vs.

grep -f <(grep -v ^# patterns.txt) text.txt |sort -u

Ha olvasni akarod őket, akkor így lehet olvasni őket. Első:

- kilistázom soronként a patterneket
- kiszedem közülük a kommenteket, csak a nem-kommentezett patternekkel foglalkozom tovább
- aztán mindegyik patternt egyesével megpróbálom megtalálni a szövegben
- a talált sorokat rendezem
- és végül mindegyik találatot csak egyszer kérem.

Második:

- WTF???

Cserébe az első O(n*m) futásidejű (lassú), a második meg O(m) futásidejű (gyorsabb).

Félreértés ne essék: nem azt mondom, hogy az első vagy a második helyesebb megoldása a problémának. Csak azt hiányolom, hogy az általam ismert rendszergazdák többsége nem próbálja tudatosan menedzselni ezt az olvashatóság vs. hatékonyság dolgot, hanem egyértelműen a hatékonyságot részesíti előnyben, gondolkodás nélkül. Van, amikor ez kell, de van, amikor összességében jobb lenne a másik...