Portál AbcLinuxu, 9. května 2025 21:28
while read STR; do : done < filePokud spustim takovy testovaci skrypt na soubor o cca 15 MB textu, tak jsou hodnoty nasledujici
real 0m3.328s user 0m2.948s sys 0m0.380sale cteni:
cat file > /dev/null real 0m0.016s user 0m0.000s sys 0m0.016s- s pouzitim vystupu jde cas rapidne nahoru
while read STR; do echo $STR > /dev/null done < file real 0m15.435s user 0m14.281s sys 0m1.060sPridam-li do takoveho skryptu par grepu na filtrovani tak je prace s takovym souborem na nekolik minut. Je nejaka moznost urychleni? Diky.
Řešení dotazu:
grep
, sed
LANG=C.
Např. soubor 500000 řádků kladných a záporných čísel:
bash$ time grep "^-" soubor > soubor2 real 0m13.343s user 0m13.322s sys 0m0.013s bash$ time LANG=C grep "^-" soubor > soubor2 real 0m0.024s user 0m0.007s sys 0m0.010sPro přístup k utf8 znakům (ke každému jednomu) se používá jiná rutina (mohou mít různou délku), takže to dost zpomaluje. Je to v zásadě chyba, možná to je už někde vyřešené/optimalizované, nevím.
bash$ time bash -c "while read STR; do :; done < soubor" real 0m6.095s user 0m5.660s sys 0m0.430s bash$ time LANG=C bash -c "while read STR; do :; done < soubor" real 0m3.180s user 0m2.723s sys 0m0.447s
Je nejaka moznost urychleni?Jediný způsob, jak zrychlit shellovský skript je použít jiný programovací jazyk
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.