[英]Do I need stay away from bash scripts for big files?
我的日志文件很大(1-2 GB和更多)。 我是編程和bash的新手,對我來說是如此有用和容易。 當我需要某些東西時,我可以做(有人在這里幫助我)。 簡單的腳本可以很好地工作,但是當我需要復雜的操作時,也許bash如此之慢,也許我的編程技能如此之差,它是如此緩慢。
那么,對於服務器日志文件上的復雜編程,我是否需要C?還是僅需要優化腳本?
如果我只需要優化,如何檢查代碼中哪些地方不好或什么地方好?
例如我有while-do循環:
while read -r date month size;
do
...
...
done < file.tmp
如何使用awk更快運行?
這取決於您如何使用bash。 為了說明這一點,請考慮如何對可能大量的整數求和。
該功能實現了Bash的目的:作為調用其他實用程序的控制邏輯。
sumlines_fast() {
awk '{n += $1} END {print n}'
}
它在一百萬行文件中運行0.5秒。 這就是您可以非常有效地用於較大文件的bash代碼。
同時,此功能實現了Bash不需要的功能:作為通用編程語言:
sumlines_slow() {
local i=0
while IFS= read -r line
do
(( i += $line ))
done
echo "$i"
}
此功能很慢,並且需要30秒才能對相同的百萬行文件求和。 對於較大的文件,您不應該這樣做。
最后,這是一個完全不了解bash的人可能編寫的函數:
sumlines_garbage() {
i=0
for f in `cat`
do
i=`echo $f + $i | bc`
done
echo $i
}
它將叉子視為自由叉,因此運行緩慢。 總和大約需要五個小時。 您根本不應該使用此功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.