AWK - 漂亮列印



到目前為止,我們已經使用了 AWK 的 printprintf 函式在標準輸出上顯示資料。但是 printf 比我們之前看到的要強大得多。此函式是從 C 語言借用的,在生成格式化輸出時非常有用。以下是 printf 語句的語法:

語法

printf fmt, expr-list

在上面的語法中,fmt 是格式說明和常量的字串。expr-list 是與格式說明符相對應的引數列表。

轉義序列

與任何字串類似,格式可以包含嵌入的轉義序列。下面討論的是 AWK 支援的轉義序列:

換行符

以下示例使用換行符在單獨的行中列印 HelloWorld

示例

[jerry]$ awk 'BEGIN { printf "Hello\nWorld\n" }'

執行此程式碼後,您將獲得以下結果:

輸出

Hello
World

水平製表符

以下示例使用水平製表符顯示不同的欄位:

示例

[jerry]$ awk 'BEGIN { printf "Sr No\tName\tSub\tMarks\n" }'

執行上述程式碼後,您將獲得以下結果:

輸出

Sr No   Name    Sub Marks

垂直製表符

以下示例在每個欄位後使用垂直製表符:

示例

[jerry]$ awk 'BEGIN { printf "Sr No\vName\vSub\vMarks\n" }'

執行此程式碼後,您將獲得以下結果:

輸出

Sr No
   Name
      Sub
         Marks

退格符

以下示例在每個欄位(最後一個欄位除外)之後列印一個退格符。它會從前三個欄位中刪除最後一個數字。例如,Field 1 顯示為 Field,因為最後一個字元已用退格符刪除。但是,最後一個欄位 Field 4 按原樣顯示,因為我們在 Field 4 後沒有 \b

示例

[jerry]$ awk 'BEGIN { printf "Field 1\bField 2\bField 3\bField 4\n" }'

執行此程式碼後,您將獲得以下結果:

輸出

Field Field Field Field 4

回車符

在以下示例中,列印每個欄位後,我們執行一個 回車並在當前列印值的頂部列印下一個值。這意味著在最終輸出中,您只能看到 Field 4,因為它是在所有先前欄位頂部列印的最後一個內容。

示例

[jerry]$ awk 'BEGIN { printf "Field 1\rField 2\rField 3\rField 4\n" }'

執行此程式碼後,您將獲得以下結果:

輸出

Field 4

換頁符

以下示例在列印每個欄位後使用換頁符。

示例

[jerry]$ awk 'BEGIN { printf "Sr No\fName\fSub\fMarks\n" }'

執行此程式碼後,您將獲得以下結果:

輸出

Sr No
   Name
      Sub
         Marks

格式說明符

與 C 語言一樣,AWK 也具有格式說明符。printf 語句的 AWK 版本接受以下轉換規範格式:

%c

它列印單個字元。如果用於 %c 的引數是數字,則將其視為字元並列印。否則,假定該引數為字串,並且只打印該字串的第一個字元。

示例

[jerry]$ awk 'BEGIN { printf "ASCII value 65 = character %c\n", 65 }'

輸出

執行此程式碼後,您將獲得以下結果:

ASCII value 65 = character A

%d 和 %i

它只打印十進位制數的整數部分。

示例

[jerry]$ awk 'BEGIN { printf "Percentags = %d\n", 80.66 }'

執行此程式碼後,您將獲得以下結果:

輸出

Percentags = 80

%e 和 %E

它列印 [-]d.dddddde[+-]dd 形式的浮點數。

示例

[jerry]$ awk 'BEGIN { printf "Percentags = %E\n", 80.66 }'

執行此程式碼後,您將獲得以下結果:

輸出

Percentags = 8.066000e+01

%E 格式使用 E 代替 e。

示例

[jerry]$ awk 'BEGIN { printf "Percentags = %e\n", 80.66 }'

執行此程式碼後,您將獲得以下結果:

輸出

Percentags = 8.066000E+01

%f

它列印 [-]ddd.dddddd 形式的浮點數。

示例

[jerry]$ awk 'BEGIN { printf "Percentags = %f\n", 80.66 }'

執行此程式碼後,您將獲得以下結果:

輸出

Percentags = 80.660000

%g 和 %G

使用 %e 或 %f 轉換,以較短者為準,並抑制非有效數字零。

示例

[jerry]$ awk 'BEGIN { printf "Percentags = %g\n", 80.66 }'

輸出

執行此程式碼後,您將獲得以下結果:

Percentags = 80.66

%G 格式使用 %E 代替 %e。

示例

[jerry]$ awk 'BEGIN { printf "Percentags = %G\n", 80.66 }'

執行此程式碼後,您將獲得以下結果:

輸出

Percentags = 80.66

%o

它列印無符號八進位制數。

示例

[jerry]$ awk 'BEGIN { printf "Octal representation of decimal number 10 = %o\n", 10}'

執行此程式碼後,您將獲得以下結果:

輸出

Octal representation of decimal number 10 = 12

%u

它列印無符號十進位制數。

示例

[jerry]$ awk 'BEGIN { printf "Unsigned 10 = %u\n", 10 }'

執行此程式碼後,您將獲得以下結果:

輸出

Unsigned 10 = 10

%s

它列印字元字串。

示例

[jerry]$ awk 'BEGIN { printf "Name = %s\n", "Sherlock Holmes" }'

執行此程式碼後,您將獲得以下結果:

輸出

Name = Sherlock Holmes

%x 和 %X

它列印無符號十六進位制數。%X 格式使用大寫字母代替小寫字母。

示例

[jerry]$ awk 'BEGIN { 
   printf "Hexadecimal representation of decimal number 15 = %x\n", 15
}'

執行此程式碼後,您將獲得以下結果:

輸出

Hexadecimal representation of decimal number 15 = f

現在讓我們使用 %X 並觀察結果:

示例

[jerry]$ awk 'BEGIN { 
   printf "Hexadecimal representation of decimal number 15 = %X\n", 15
}'

執行此程式碼後,您將獲得以下結果:

輸出

Hexadecimal representation of decimal number 15 = F

%%

它列印單個 % 字元,並且沒有轉換任何引數。

示例

[jerry]$ awk 'BEGIN { printf "Percentags = %d%%\n", 80.66 }'

執行此程式碼後,您將獲得以下結果:

輸出

Percentags = 80%

帶 % 的可選引數

使用 %,我們可以使用以下可選引數:

寬度

欄位將填充到 width。預設情況下,欄位用空格填充,但當使用 0 標誌時,它用零填充。

示例

[jerry]$ awk 'BEGIN { 
   num1 = 10; num2 = 20; printf "Num1 = %10d\nNum2 = %10d\n", num1, num2 
}'

執行此程式碼後,您將獲得以下結果:

輸出

Num1 =         10
Num2 =         20

前導零

前導零充當標誌,表示輸出應使用零而不是空格填充。請注意,此標誌僅在欄位寬度大於要列印的值時才有效。以下示例描述了這一點:

示例

[jerry]$ awk 'BEGIN { 
   num1 = -10; num2 = 20; printf "Num1 = %05d\nNum2 = %05d\n", num1, num2 
}'

執行此程式碼後,您將獲得以下結果:

輸出

Num1 = -0010
Num2 = 00020

左對齊

表示式應在其欄位內左對齊。當輸入字串小於指定的字元數,並且您希望將其左對齊,即透過在右側新增空格,請在 % 後面和數字前面使用減號 (-)。

在以下示例中,AWK 命令的輸出透過管道傳輸到 cat 命令以顯示行尾 ($) 字元。

示例

[jerry]$ awk 'BEGIN { num = 10; printf "Num = %-5d\n", num }' | cat -vte

執行此程式碼後,您將獲得以下結果:

輸出

Num = 10   $

字首符號

它始終為數值新增字首符號,即使該值為正數。

示例

[jerry]$ awk 'BEGIN { 
   num1 = -10; num2 = 20; printf "Num1 = %+d\nNum2 = %+d\n", num1, num2 
}'

執行此程式碼後,您將獲得以下結果:

輸出

Num1 = -10
Num2 = +20

井號

對於 %o,它提供前導零。對於 %x 和 %X,它分別提供前導 0x 或 0X,僅當結果非零時。對於 %e、%E、%f 和 %F,結果始終包含小數點。對於 %g 和 %G,不會從結果中刪除尾隨零。以下示例描述了這一點:

示例

[jerry]$ awk 'BEGIN { 
   printf "Octal representation = %#o\nHexadecimal representaion = %#X\n", 10, 10
}'

執行此程式碼後,您將獲得以下結果:

輸出

Octal representation = 012
Hexadecimal representation = 0XA
廣告
© . All rights reserved.