Komplex példa
STDIN olvasása szkriptben
#!/bin/bash
# Oszlopok kivágása pipe-al átadott szövegből
echo Második és harmadik oszlopok tartalma:
echo ====================================
echo
cat /dev/stdin | cut -d' ' -f 2,3 | sort
Sebesség teszt
Próbáljátok ki némileg értelmezve a lenti parancsokat, hogy lássátok, hogy mekkora különbségeket tudnak okozni egy feladat különféle megoldásainak különbségei.
Előállítunk egy hosszú karaterláncot
hello=`printf "$(seq 9 | sed ':a;N;$!ba;s/\n//g' | sed 's/$/X/')%.0s" {1..2000}`
echo $hello~$ 123456789X123456789X123456789X123456789X123456789X123456789X123456789X....
Kezdeti timestamp
P1=$(($(date +%s%N)/1000000))
2000 iterációval ax X-ek cseréje. Maga a csere nem túl értelmes, mert az első csere valójában egy pillanat alatt lecseréli az összes X-et, de itt az a lényeg, hogy lássuk, hogy ezek az egyébként gyors parancsok hogyan viselkednek, amikor iteráljuk őket.
for i in {1..2000}; doecho $hello | sed s/X//g > /dev/null
done
Feladat vége timestamp, eltelt idő kiírása ms-ban:
P2=$(($(date +%s%N)/1000000))
echo $[$P2-$P1]
Második megoldás | és sed nélkül - bash paraméter helyettesítéssel:
for i in {1..2000}; do echo ${hello//X/} > /dev/nulldone
Feladat vége timestamp, eltelt idő kiírása ms-ban:
P3=$(($(date +%s%N)/1000000))
echo $[$P3-$P2]
Hányszor volt gyorsabb a 2. megoldás?
echo $(($[$P2-$P1]/$[$P3-$P2]))X