目录
输出
print 与 printf 语句可以用来产生输出. print 用于产生简单的输出; printf 用于产
生格式化的输出。来自 print 与 printf 的输出可以被重定向到文件, 管道与终端. 这两个语句可以混合使用。
print 语句
print 语句具有形式:
语句 print
是 print $0
的缩写形式. 为了打印空白行 (即只含有换行符的行), 可以这样写:print “”
输出分隔符
输出字段分割符与输出记录分隔符存储在内建变量 OFS 与 ORS 中. 初始情况下, OFS 与ORS 分别被设置成一个空格符与一个换行符, 但它们的值可以在任何时候改变。
printf 语句
printf
用于产生格式化的输出. 它与 C 语言中的 printf 函数很像, 但是 awk 的 printf
不支持格式说明符 *. 与 print 一样, 它也有带括号与不带括号的两种形式:
参数 format 总是必须的, 它是一个变量, 其字符串值含有字面文本与格式说明符, 字面文本会按照文本的字面值输出, 格式说明符规定了参数列表中的表达式将被如何格式化地输出。
printf 格式控制字符表
字符 | 含义 |
---|---|
c | ASCII 字符 |
d | 十进制整数 |
e | [-]d.ddddddE[±]dd |
f | [-]ddd.dddddd |
g | 按照 e 或 f 进行转换, 选择较短的那个, 无意义的零会被抑制 |
o | 无符号八进制数 |
s | 字符串 |
x | 无符号十六进制数 |
% | 打印一个百分号 %, 不会有参数被吸收 |
输出到文件
重定向运算符 > 与 >> 用于将输出重定向到文件, 而不是原来的标准输出。下面这个程序将所有输入行的第 1 个与第 3 个字段输出到两个文件中: 如果第 3 个字段大于 100, 则输出到bigpop, 否则的话, 输出到 smallpop:
注意, 文件名必须用双引号括起来; 如果没有双引号的话, bigpop 与 smallpop 将被当作未初始化的变量. 文件名也可以是表达式或变量。
{ print > $1 }
将所有的输入行输出到以第 1 个字段命名的文件中。在 print 与 printf 语句中, 如果参数列表中的表达式包含有关系运算符, 那么, 表达式(或者是参数列表) 需要用括号括起来. 这样做是为了避免由重定向运算符 > 带来的歧义。
输出到管道
在支持管道的系统中, 也可以把输出重定向到管道, 而不仅仅是文件。语句
print | command 导致 print 的输出以管道的方式传递给 command。熟悉linux操作的人对这个操作应该都不陌生。
关闭文件与管道
语句 close(expression) 关闭一个文件或管道, 文件或管道由 expression 指定; expression 的字符串值必须与最初用于创建文件或管道的字符串值相同. 于是
关闭上面打开的排序管道。在同一个程序中, 如果你写了一个文件, 而待会儿想要读取它, 那么就需要调用 close。某一时刻, 同时处于打开状态的文件或管道数量最大值由实现定义。
本节的内容我们详细说明了 awk 的输出,包括格式化输出以及输出到文件和管道等,下节我们来了解 awk 的输入,我们下节见。