簡體   English   中英

我需要遠離大文件的bash腳本嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM