2011-07-06 35 views
5

我有一個項目,我想操縱某些輸出文件。命令行工具可以比C++更快嗎?

這可以用grep的組合來實現和sed和管道與|

另外,我也可以寫一個C++程序做同樣的事情。

有沒有哪種方法將是自更快的grep和sed確鑿的答案應該已經是相當不錯的優化?

+16

通過你寫的C++應用程序時,該腳本將完成一千次,我認爲。 – Xeo

+0

編寫速度更快的sed/awk/grep等是相當困難的。 – Drakosha

+4

......並非所有東西都是釘子......知道何時使用正確的工具來完成手頭的工作...... – Nim

回答

4

如果我是你,使用什麼已經在那裏,因爲這些可能已經很長時間,並已經過測試和嘗試。自己寫一個新的程序做同樣的事情似乎是一個重新發明輪子類型的動作,而且容易出錯。

7

從技術角度來看,一個精心編寫自包含的C++程序,它需要會比使用與管道相互連接的兩個(或更多)shell命令更快的一切,僅僅是因爲不會有IPC開銷,他們可以根據您的確切需求量身定做並進行優化。

但是,除非你正在編寫一個程序,這個程序將在幾年內全天候運行,否則你永遠不會注意到有足夠的收穫值得付出努力。

而對於預優化的標準規則...

+3

這就是假設你知道所有的算法和優化技巧的開發者使用grep和sed – KillianDS

+0

@KillianDS:我懷疑在Perl,Python或Boost中的正則表達式比grep慢得多。爲了逐行處理一個簡單的文件,我使用Python比bash和sed獲得了更好的性能。 –

0

如果你真的需要更快的性能比你用管道得到的,你可以下載grep的源和sed和它符合您的需要在一個應用程序(如果您打算分發您的代碼,請小心許可證)。如果你甚至注意到管道的開銷(如Flimzy提到的),我會非常驚訝,所以如果事情真的很慢,我會開始分析你的應用程序。

0

它是可能的,如果你是一個非常良好的C/C++程序員,花大量的時間很多,那你就可以寫一個程序,它比你想的管道更快。但是除非在這種情況下性能如此重要,否則你絕對必須這樣做,你應該使用管道。