99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

AWK 優(yōu)雅的輸出

2018-08-30 15:22 更新

優(yōu)雅地輸出

前面我們已經(jīng)用過了 AWK 中的 print 函數(shù)與 printf 函數(shù),它們將數(shù)據(jù)輸出到標(biāo)準(zhǔn)輸出流中。其實 printf 函數(shù)的功能遠(yuǎn)比我們前面演示的強(qiáng)大。這個函數(shù)是從 C 語言中借鑒來而的,主要用于生成格式化的輸出。下面是 printf 的使用方法:

printf fmt, expr-list

其中,fmt 是字符串常量或者格式規(guī)格說明字符串,expr-list 是與格式說明相對應(yīng)的參數(shù)列表。

轉(zhuǎn)義序列

與一般字符串一樣,格式化字符串也能內(nèi)嵌轉(zhuǎn)義序列。 AWK 支持的轉(zhuǎn)義序列如下:

換行符

下面的例子中使用換行符將 Hello 與 World 分開輸出到獨立兩行:

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Hello
World

水平制表符

如下示例,使用制表符顯示不同的域:

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Sr No    Name    Sub Marks

垂直制表符

如下示例,使用垂直制表符輸出不同域:

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Sr No
    Name
        Sub
            Marks

退格符

下面的例子中,我們在每個域輸出后都再輸出退格符(最后一個域除外)。這樣前三個域的每一域的最后一個字符都會被刪除。比如說,F(xiàn)ield 1 輸出為 Field。因為最后一個字符被退格符刪除。不過Field 4可以正常顯示,因為在Field 4輸出后沒有輸出退格符。

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Field Field Field Field 4

回車

下面的例子中,我們在每個域輸出后輸出一個回車符,隨后輸出的域會覆蓋之前輸出的內(nèi)容。也就是說,我們只能看到最后輸出的 Field 4。

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Field 4

換頁符

下面的例子中每個域后輸出后輸出一個換頁符:

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Sr No
    Name
        Sub
            Marks

格式說明符

與 C 語言一樣,AWK 也定義了格式說明符。 AWK 的 printf 允許如下的格式的轉(zhuǎn)換:

%c

輸出單個字符。如果參數(shù)是個數(shù)值,那么數(shù)值也會被當(dāng)作字符然后輸出。如果參數(shù)是字符串,那么只會輸出字符串的第一個字符。

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

ASCII value 65 = character A

%d 與 %i

輸出十進(jìn)制數(shù)的整數(shù)部分。

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Percentags = 80

%e 與 %E

以 [-]d.dddddde[+-]dd 的格式輸出浮點數(shù)。

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Percentags = 8.066000e+01

%E 格式使用 E 而不是 e。

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Percentags = 8.066000E+01

%f

以 [-]ddd.dddddd 的格式輸出浮點數(shù)。

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Percentags = 80.660000

%g 與 %G

輸出浮點數(shù),使用 %e 或 %E 轉(zhuǎn)換。但它們會刪除那些對數(shù)值無影響的 0。

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Percentags = 80.66

%G 使用 %E 格式化,而不是 %e。

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Percentags = 80.66

%o

無符號八進(jìn)制輸出。

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Octal representation of decimal number 10 = 12

%u

無符號十進(jìn)制數(shù)輸出。

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Unsigned 10 = 10

%x 與 %X

輸出十六進(jìn)制無符號數(shù)。%X 中使用大寫字母,%x 使用小寫字母。

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Hexadecimal representation of decimal number 15 = f

使用 %X 的輸出結(jié)果如下:

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Hexadecimal representation of decimal number 15 = F

%%

輸出百分號(%),不需要輸入?yún)?shù)。

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Percentags = 80%

% 的可選參數(shù)

% 可以使用如下可選參數(shù):

寬度

輸出域會被填充滿足寬度要求。默認(rèn)情況下使用空格字符填充。但是,當(dāng)標(biāo)志 0 被設(shè)置后會使用 0 填充。

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Num1 =         10
Num2 =         20

前導(dǎo)零

緊接在 % 后的零被當(dāng)作標(biāo)示,表示輸出應(yīng)該使用零填充而不是空格字符。請注意,只有當(dāng)域的寬度比要求寬度小時該標(biāo)示才會有效。示例如下:

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Num1 = -0010
Num2 = 00020

左對齊

輸出域被設(shè)置為左對齊。當(dāng)輸出字符串字符數(shù)比指定寬度少時,你可能希望在輸出它時能左對齊。比如,在右邊添加空格符。在 % 之后數(shù)字之前使用減號(-)即可指定輸出左對齊。下面的例子中,AWK 的輸出做為 cat 的輸入,在 cat 中輸出行結(jié)束符號($)。

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Num1 = -0010
Num2 = 00020

符號前綴

輸出數(shù)值的符號,正號也輸出。

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Num1 = -10
Num2 = +20

哈希(Hash)

使用 Hash 可以為 %o 的結(jié)果前添加0,為 %x 或 %X 輸出的結(jié)果前添加 0x 或 0X (結(jié)果不為零時),為 %e,%E,%f,%F添加小數(shù)點;對于 %g 或 %G,使用哈??梢员A粑膊康牧恪J褂檬纠缦拢?

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

執(zhí)行上面的命令可以得到如下的結(jié)果:

Octal representation = 012
Hexadecimal representation = 0XA
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號