- AWK 教程
- AWK - 首頁
- AWK - 概述
- AWK - 環境
- AWK - 工作流程
- AWK - 基本語法
- AWK - 基本示例
- AWK - 內建變數
- AWK - 運算子
- AWK - 正則表示式
- AWK - 陣列
- AWK - 控制流
- AWK - 迴圈
- AWK - 內建函式
- AWK - 使用者自定義函式
- AWK - 輸出重定向
- AWK - 漂亮列印
- AWK 有用資源
- AWK - 快速指南
- AWK - 有用資源
- AWK - 討論
AWK - 漂亮列印
到目前為止,我們已經使用了 AWK 的 print 和 printf 函式在標準輸出上顯示資料。但是 printf 比我們之前看到的要強大得多。此函式是從 C 語言借用的,在生成格式化輸出時非常有用。以下是 printf 語句的語法:
語法
printf fmt, expr-list
在上面的語法中,fmt 是格式說明和常量的字串。expr-list 是與格式說明符相對應的引數列表。
轉義序列
與任何字串類似,格式可以包含嵌入的轉義序列。下面討論的是 AWK 支援的轉義序列:
換行符
以下示例使用換行符在單獨的行中列印 Hello 和 World:
示例
[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