AWK 美观打印

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

退格键

以下示例在每个字段后都打印一个退格键,最后一个字段除外。它会擦除前三个字段中的最后一个数字。例如,字段1显示为字段,因为使用退格键擦除了最后一个字符。然而,最后一个字段字段4会按原样显示,因为我们在字段4后没有使用退格键。

示例

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

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

输出

Field Field Field Field 4

回车符

在以下示例中,打印每个字段后,我们进行一个 回车符 ,并将下一个值打印在当前打印的值的顶部。这意味着,最终输出中,您只能看到 字段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也有格式说明符。AWK版本的printf语句接受以下转换规格格式 –

%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格式。

示例

[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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程