AWK - 整齐打印

首页 / Awk / Pretty Printing

到目前为止,我们已经使用AWK的 print printf 函数在标准输出上显示数据,但是printf比我们以前看到的强大得多,此函数是从 C 语言借来的,在生成格式化输出时非常有用。

以下是printf语句的语法-

printf fmt, expr-list

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

转义序列

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

换行符(\n)

以下示例使用换行符在单独的行中打印 Hello 和 Learnfk -

[Learnfk]$awk 'BEGIN { printf "Hello\nLearnfk\n" }'

在执行此代码时,您将获得以下输出-

Hello
Learnfk

水平制表符(\t)

以下示例使用水平选项卡显示不同的字段-

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

执行上述代码后,您将获得以下输出-

Sr No   Name    Sub Marks

垂直标签符(\v)

以下示例在每次提交后使用垂直选项卡-

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

在执行此代码时,您将获得以下输出-

Sr No
   Name
      Sub
         Marks

退格键(\b)

以下示例在除最后一个字段之外的每个字段之后打印退格键,如,字段1 显示为字段,因为最后一个字符用退格键删除,但是,最后一个字段 Field 4 会按原样显示,因为我们在 Field 4 之后没有\b 。

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

在执行此代码时,您将获得以下输出-

Field Field Field Field 4

回车符(\r)

在以下示例中,在打印完每个字段之后,我们执行回车并在当前打印值的顶部打印下一个值,这意味着,在最终输出中,您只能看到字段4,因为它是最后打印在所有先前字段之上的东西。

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

在执行此代码时,您将获得以下输出-

Field 4

换页符(\f)

下面的示例在打印每个字段后使用换页。

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

在执行此代码时,您将获得以下输出-

Sr No
   Name
      Sub
         Marks

格式符

与C语言一样,AWK也具有格式说明符。 printf语句的AWK版本接受以下转换规范格式-

%c 字符

它只打印一个字符。如果用于%c 的参数是数字,则将其视为字符并打印。否则,将假定参数为字符串,并打印该字符串的唯一第一个字符。

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

在执行此代码时,您将获得以下输出-

ASCII value 65=character A

%d和%i 整数

它仅打印十进制数字的整数部分。

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

在执行此代码时,您将获得以下输出-

Percentags=80

%e和%E 浮点数

它打印格式为[-] d.dddddde [+-] dd的浮点数。

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

在执行此代码时,您将获得以下输出-

Percentags=8.066000e+01

%E 格式使用 E 代替e。

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

在执行此代码时,您将获得以下输出-

Percentags=8.066000E+01

%f 浮点数

它以[-] ddd.dddddd格式打印浮点数。

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

在执行此代码时,您将获得以下输出-

Percentags=80.660000

%g和%G 

使用%e或%f转换(以较短者为准),并抑制不重要的零。

无涯教程网

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

在执行此代码时,您将获得以下输出-

Percentags=80.66

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

链接:https://www.learnfk.com/awk/awk-pretty-printing.html

来源:LearnFk无涯教程网

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

在执行此代码时,您将获得以下输出-

Percentags=80.66

%o 八进制 

打印无符号的八进制数字。

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

在执行此代码时,您将获得以下输出-

Octal representation of decimal number 10=12

%u 十进制

打印无符号十进制数字。

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

在执行此代码时,您将获得以下输出-

Unsigned 10=10

%s 字符串

它打印一个字符串。

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

在执行此代码时,您将获得以下输出-

Name=Sherlock Holmes

%x和%X 十六进制

打印无符号的十六进制数字。 %X 格式使用大写字母而不是小写字母。

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

在执行此代码时,您将获得以下输出-

Hexadecimal representation of decimal number 15=f

现在让我们使用%X并观察输出-

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

在执行此代码时,您将获得以下输出-

Hexadecimal representation of decimal number 15=F

%% 字符

它只打印一个%字符,并且不转换任何参数。

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

在执行此代码时,您将获得以下输出-

Percentags=80%

带%的可选参数

使用%,我们可以使用以下可选参数-

Width宽

该字段填充为 width 。默认情况下,该字段用空格填充,但是当使用0标志时,则用零填充。

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

在执行此代码时,您将获得以下输出-

Num1=        10
Num2=        20

前导零

前导零用作标志,指示输出应填充零而不是空格。请注意,只有当字段的宽度大于要打印的值时,此标志才有效。以下示例对此进行了描述-

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

在执行此代码时,您将获得以下输出-

Num1=-0010
Num2=00020

左对齐

该表达式应在其字段内左对齐。如果输入字符串少于指定的字符数,并且希望将其左对齐,即通过在右边添加空格,则在%之后和数字之前使用减号(–)。

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

在执行此代码时,您将获得以下输出-

Num=10   $

前缀符号

即使数值为正数,它也始终以数字为前缀。

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

在执行此代码时,您将获得以下输出-

Num1=-10
Num2=+20

Hash

对于%o,它提供前导零,对于%x和%X,仅当结果为非零时,它才分别提供前导0x或0X, 对于%e,%E,%f和%F,结果始终包含小数点, 对于%g和%G,不会从结果中删除尾随零。 以下示例对此进行了描述-

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

在执行此代码时,您将获得以下输出-

Octal representation=012
Hexadecimal representation=0XA

这一章《AWK - 整齐打印》你学到了什么?在下面做个笔记吧!做站不易,你的分享是对我们最大的支持,感谢!😊

相关文章

技术领导力实战笔记 -〔TGO鲲鹏会 - 268讲〕

数据结构与算法之美 -〔王争 - 80讲〕

DevOps实战笔记 -〔石雪峰 - 41讲〕

编程高手必学的内存知识 -〔海纳 - 32讲〕

创建一个由 1-90 的唯一数字组成的 M*N 矩阵

Pandas - 添加新列 - 使用循环

根据特定列中的数据框条目添加新列的最快方法是什么

如何让我的 Next.js 应用在运行 ubuntu-latest 的 Azure 应用服...

如何在 Java 或 Kotlin 中拆分数组?

计算区间中素数的算法不起作用

视频推荐〔Awk - 11-三剑客-sed-增删改查之后向引用〕

更多视频 »
好记忆不如烂笔头。留下你的足迹吧 :)