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}; do
   echo $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/null
done

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

Ultima modificare: Sunday, 7 November 2021, 19:56