awk之printf詳解

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補充格式

相關文章
相關標籤/搜索