2012-09-06 44 views
3

awk中有兩個輸出函數:printprintfawk print和printf函數

  • 它們在awk中的實現有很大的不同嗎?
  • 性能/速度有什麼區別(如果可能的話 - 理論上,不僅在命令行上的「time」)?
  • 他們是否使用相同的系統調用?

回答

9
  1. 性能差異可能無法衡量。
  2. print函數在最後輸出一個換行符;除非有要求,否則printf不會。
  3. print代碼將參數轉換爲字符串,然後將它們發送到由OFS(輸出字段分隔符)分隔的輸出。
  4. printf代碼可能需要將該字符串轉換爲雙精度格式,然後使用雙格式(%16.8g或其他)和類似操作對其進行格式設置。
  5. 所使用的系統調用是write(2)或類似的兩種,但會有代碼(可能是<stdio.h>)分層以上。

所有這些加起來:

  • 的實現是不同的; printprintf稍微簡單一點(因此速度更快)。
  • 對於大多數目的,差異可能無法衡量。
  • 使用print如果它會做你所需要的;當它做你需要的時候使用printf
  • 別擔心。

,並使用sprintf其次print很可能會比直接使用printf慢,所以不知道。

如有疑問,請測量。

+0

謝謝! 我測量了具有3個FP參數的特定輸出行的時間(多次統計):'print:printf〜= 16s:17s'。所以差異不是那麼大。 – static