printf()函數是格式化輸出函數, 通常用於向標準輸出設備按規定格式輸出信息。在編寫程序時常常會用到此函數。printf()函數的調用格式爲: 函數
printf("", ); 3d
其中格式化字符串包括兩部份內容: 一部分是正常字符, 這些字符將按原樣輸出; 另外一部分是格式化規定字符, 以"%"開始, 後跟一個或幾個規定字符,用來肯定輸出內容格式。指針
參量表是須要輸出的一系列參數, 其個數必須與格式化字符串所說明的輸出參數個數同樣多, 各參數之間用","分開, 且順序一一對應, 不然將會出現意想不到的錯誤。字符串
%d 十進制有符號整數 test
%u 十進制無符號整數 awk
%f 浮點數 sed
%s 字符串 程序
%c 單個字符 db
%p 指針的值 字符
%e 指數形式的浮點數
%x, %X 無符號以十六進制表示的整數
%0 無符號以八進制表示的整數
%g 自動選擇合適的表示法
\n 換行
\f 清屏並換頁
\r 回車
\t Tab符
\xhh 表示一個ASCII碼用16進表示,其中hh是1到2個16進制數
說明:
(1). 能夠在"%"和字母之間插進數字表示最大場寬。
例如: %3d 表示輸出3位整型數, 不夠3位右對齊。
%9.2f 表示輸出場寬爲9的浮點數, 其中小數位爲2, 整數位爲6,小數點佔一位, 不夠9位右對齊。
%8s 表示輸出8個字符的字符串, 不夠8個字符右對齊。
若是字符串的長度、或整型數位數超過說明的場寬, 將按其實際長度輸出.但對浮點數, 若整數部分位數超過了說明的整數位寬度, 將按實際整數位輸出;若小數部分位數超過了說明的小數位寬度, 則按說明的寬度以四捨五入輸出.
另外, 若想在輸出值前加一些0, 就應在場寬項前加個0。
例如: %04d 表示在輸出一個小於4位的數值時, 將在前面補0使其總寬度爲4位。
若是用浮點數表示字符或整型量的輸出格式, 小數點後的數字表明最大寬度,小數點前的數字表明最小寬度。
例如: %6.9s 表示顯示一個長度不小於6且不大於9的字符串。若大於9, 則第9個字符之後的內容將被刪除。
(2). 能夠在"%"和字母之間加小寫字母l, 表示輸出的是長型數。
例如: %ld 表示輸出long整數
%lf 表示輸出double浮點數
(3). 能夠控制輸出左對齊或右對齊, 即在"%"和字母之間加入一個"-" 號可說明輸出爲左對齊, 不然爲右對齊。
例如: %-7d 表示輸出7位整數左對齊
%-10s 表示輸出10個字符左對齊
例子:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.5G 2.1G 7.0G 23% /
/dev/sda5 1.9G 36M 1.8G 2% /home
/dev/sda3 7.0G 145M 6.5G 3% /test
/dev/sda1 99M 12M 83M 13% /boot
tmpfs 252M 0 252M 0% /dev/shm
/dev/sdb1 380M 117M 244M 33% /backup
/dev/sdb2 618M 17M 570M 3% /ros
$ df -h|awk '{printf ("%12s\n",$1)}'
Filesystem
/dev/sda2
/dev/sda5
/dev/sda3
/dev/sda1
tmpfs
/dev/sdb1
/dev/sdb2
該命令就以12個字符串爲格式,不夠的空格不足,右對齊。
$ df -h|awk '{printf ("%-12s\n",$1)}'
Filesystem
/dev/sda2
/dev/sda5
/dev/sda3
/dev/sda1
tmpfs
/dev/sdb1
/dev/sdb2
同上,以左對齊。
例子:
$ echo "1.7 2.52" | awk '{printf ("%d\n",$2)}'
2
#整數換行輸出第2個域
$ echo "1.7 2.52" | awk '{printf ("%f\n",$1)}'
1.700000
#浮點換行輸出第1個域
$ echo "1.5" | awk '{printf ("%.f\n",$1)}'
2
$ echo "1.4" | awk '{printf ("%.f\n",$1)}'
1
#四捨五入輸入整數
$ echo "1.7 2.52" | awk '{printf ("%3.1f\n",$2)}'
2.5
#以3位長度、1位小數,"."佔一位,浮點換行輸出第2個域(四捨五入)。
$ echo "1.7 2.52" | awk '{printf ("%6.3f\n",$2)}'
2.520
#以6位長度,其中整數佔2位,不足2位空格補足,「.」佔一位,小數佔3位,不足3位用0補足。
$ echo "1.7 2.52" | awk '{printf ("%e\n",$1)}'
1.700000e+00
#指數形式的浮點數輸出。
$ echo "123 1" | awk '{printf("%d\t%03d\n",$1,$2)}'
123 001
#用0補充格式