新彩天欢迎您!
幻海优品

AWK - Pretty Printing

到目前为止,我们使用了AWK的 print printf 函数来显示标准输出的数据.但是printf比我们之前看到的要强大得多.此函数借用C语言,在生成格式化输出时非常有用.下面是printf语句的语法 :

语法

printf fmt, expr-list

在上面的语法中, fmt 是一串格式规范和常量. expr-list 是与格式说明符对应的参数列表.

转义序列

与任何字符串类似,格式可以包含嵌入的转义序列.下面讨论的是AWK支持的转义序列 :

新行

以下示例打印 Hello 世界在单独的行中使用换行符和减号;

示例

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

执行此代码后,您将获得以下结果 :

输出

HelloWorld

水平标签

以下示例使用水平标签显示不同的字段和减号;

示例

[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

Backspace

以下示例在除最后一个字段之外的每个字段后打印退格.它会删除前三个字段中的最后一个数字.例如, Field 1 显示为 Field ,因为最后一个字符被退格删除.但是,最后一个字段字段4 按原样显示,因为我们在字段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

表格Feed

以下示例在打印每个字段后使用换页.

示例

[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%

可选参数%

使用,我们可以使用以下可选参数 :

宽度

该字段填充到宽度.默认情况下,该字段用空格填充,但是当使用0标志时,它用零填充.

示例

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

执行此代码时,你得到以下结果 :

输出

Num1 =         10Num2 =         20

前导零

前导零作为标志,表示输出应该用零填充而不是空格.请注意,此字段仅在字段宽于要打印的值时有效.以下示例描述了此 :

示例

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

执行此代码时,你得到以下结果 :

输出

Num1 = -0010Num2 = 00020

左对齐

表达式应在其字段内左对齐.当输入字符串小于指定的字符数,并且您希望它左对齐时,即通过向右添加空格,请在%之后和数字之前使用减号( - ).

在以下示例中,AWK命令的输出通过管道输出到cat命令以显示END OF LINE($)字符.

示例

[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 = -10Num2 = +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 = 012Hexadecimal representation = 0XA

免责声明:以上内容(如有图片或视频亦包括在内)有转载其他网站资源,如有侵权请联系删除