grep bude s největší pravděpodobností rychlejší:
# time awk '/USAGE/' imapd.log.1 | wc -l
73832
real 0m2.756s
user 0m2.740s
sys 0m0.020s
# time grep 'USAGE' imapd.log.1 | wc -l
73832
real 0m0.110s
user 0m0.100s
sys 0m0.030s
awk je interpretovaný programovací jazyk, kde jako grep je zkompilovaný program v c-kódu (který je navíc optimalizován pro vyhledávání vzorů v souborech).
(Poznámka – oba příkazy jsem spustil dvakrát, aby ukládání do mezipaměti potenciálně nezkreslilo výsledky)
Další podrobnosti o interpretovaných jazycích na wikipedii.
Jak Stephane správně zdůraznil v komentářích, váš počet najetých kilometrů se může lišit v závislosti na implementaci grep a awk, které používáte, na operačním systému, který používáte, a na znakové sadě, kterou zpracováváte.
Použijte nejkonkrétnější a nejvýraznější nástroj. Nástroj, který nejlépe vyhovuje vašemu případu použití, bude pravděpodobně nejrychlejší.
Jako hrubý návod:
- hledáte řádky odpovídající podřetězci nebo regulárnímu výrazu? Použijte grep.
- vybíráte určité sloupce z jednoduše odděleného souboru? Použijte řez.
- provádění substitucí založených na vzorech nebo ... jiné věci, které sed rozumně umí? Použijte sed.
- potřebujete nějakou kombinaci výše uvedených 3 nebo formátování printf nebo obecné smyčky a větve? Použijte awk.
Když hledáte pouze řetězce a záleží na rychlosti, měli byste téměř vždy používat grep
. Je řádově rychlejší než awk
pokud jde o pouhé hrubé vyhledávání.
source Funkční a výkonnostní rozdíly sed, awk a dalších unixových nástrojů pro analýzu
UTILITY OPERATION TYPE EXECUTION TIME CHARACTERS PROCESSED PER SECOND
(10 ITERATIONS)
------- -------------- --------------- -------------------------------
grep search only 41 sec. 489.3 million
sed search & replace 4 min. 4 sec. 82.1 million
awk search & replace 4 min. 46 sec. 69.8 million
Python search & replace 4 min. 50 sec. 69.0 million
PHP search & replace 15 min. 44 sec. 21.2 million