格式化列印(二)

2022-04-05 08:55:21 字數 1514 閱讀 5859

printf語句可以規定輸出域的寬度和對齊方式。乙個格式表示式由3個可選的修飾符組成,跟在"%"後面,並出現在格式說明符之前。

%-width.precision format-specifier

描述輸出字段寬度的width是乙個數值。當指定域寬度時,這個域的內容預設為向右對齊。必須指定"-"來設定左對齊。因此, "%-20s" 輸出的走向左對齊的乙個域長度為20個字元的字串,如果字串少於20個字元,那麼這個域將用空格來填滿。在下面的例子中,輸出乙個"1"來指示輸出域的真實長度。第乙個例子是右對齊的文字:

printf("|%10s|\n", "hello")

結果是:

| hello|

下乙個例子是左對齊的文字:

printf("|%-10s|\n", "hello")

結果是:

|hello |

precision修飾符用於十進位制或浮點數,用於控制小數點右邊的數字位數。對於字串型值,它用於控制要列印的字元的最大數量。注意,數值的預設precision值為"%.6g" 。

可以根據print或printf的引數列表中的值,動態地指定寬度width和精度precision。通過用星號實際的值來實現這個功能:

printf("%*.*g\n",5,3,myvar);

在這個例子中,寬度是5,精度為3,要列印的值來自myvar。

print語句輸出數值的預設精度可以通過設定系統變數ofmt來改變。例如,如果使用awk列印報告,其中包含美元($)數值,可以將ofmt設定為"%.2f" 。

使用格式表示式的完整語法可以解決filesum中的各個欄位和標題的對齊問題。我們在檔名前輸出檔案大小的乙個原因,就是以這種順序輸出字段對齊的可能性更大,在很大程度上它們可以自己對齊。printf提供給我們的解決方法能夠回定輸出域的寬度,因此,每個域在相同的列開始。

我們來重新調整filesum報告的輸出域。我們希望得到最小的域寬度使得第二個域在相同的位置開始。域寬度應放置在%和轉換說明符之間。"%-15s"規定域的寬度為15個字元並且字元左對齊。"%10d"中沒有連字元,是右對齊的,這就是我們所希望的十進位制值的表示。

printf("%-15s\t%10d\n" , $9, $5)

這將產生乙個報告,其中的資料按列對齊並且數字是右對齊的。看一下printf語句在end中是如何被應用的:

printf("total: %d bytes (%d files)\n" , sum, filenum)

在begin規則中的標題也被適當地改變了。通過使用printf語句。filesum產生如下的結果:

$ ./filesum g*

file bytes

g 23

gawk 2237

gawk.mail 1171

gawk.test 74

gawkro 264

gfilesum 610

grades 64

grades.awk 231

grepscript 6

total: 4680 bytes (9 files)

c c 格式化列印

筆記 o,八進位制列印 x,十六進製制,a e代表11到15 x,十六進製制,a e代表11到15 i 有符號十進位制,同 d 列印不同資料型別時的格式 關於這部分的內容,自己每次用的時候都是去翻書,或者上網查,但是一直沒有發現一篇文章很系統的介紹這一部分的內容,直到讀完了 c陷阱與缺陷 在附錄中總...

格式化輸出二

name 趙飛 print 名字是 name str str age 18 print 年齡是 str age aaa int str print 年齡是 s age s str簡寫 底層 str age ismarry false 布林 true,false print 結婚否?回答 s isma...

php列印pre,php 列印格式化顯示利器

當我們php除錯的時候,用var dump 或 print r列印json資料或array陣列時,html頁面沒有換行顯示,看到的內容一大堆,不好定位。輸出前新增 便可以自動格式化換行顯示。print r 比如列印陣列 print r arr 輸出 array 0 array volume id10...