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