Output输出
awk的输出分隔符由OFS(列分隔符,默认空格” “)和ORS(行分隔符,默认换行”\n”)决定
输出函数 | 意义 |
---|---|
print expression, expression, … | |
print expression, expression, … >filename | |
print expression, expression, … >>filename | |
print expression, expression, … | command | |
printf(format, expression, expression, … ) | |
printf(format, expression, expression, … ) >filename | |
printf(format, expression, expression, … ) >>filename | |
printf(format, expression, expression, … ) |command | |
close | |
system (command) |
- print 和 print$0 一样
- print “”输出空行
output Into Files
格式空值字符
与c语言类似。
符号 | |
---|---|
c | ASCII character |
d | decimal integer 十进制 |
e | [-]d.ddddddE[+-]dd 科学计数法 |
f | [-]ddd.dddddd 浮点数 |
g | 输出格式为f格式或e格式,系统根据数据占宽度m大小,自动选择占宽度较小的某种格式输出,g格式符不输出小数点后无意义的零 |
o | unsigned octal number 无符号8进制 |
s | string 字符串 |
x | unsigned hexadecimal number 无符号16进制 |
% | %%用来转义,输出% |
Example(书上的例子)
fmt | 1|printf(fmt, 1) |
---|---|
%c | 97 |
%d | 97.5 |
%5d | 97.5 |
%e | 97.5 |
%f | 97.5 |
%7.2f | 97.5 |
%g | 97.5 |
%.6g | 97.5 |
%o | 97 |
%06o | 97 |
%x | 97 |
|%s| | January |
|%10s| | January |
|%-10s| | January |
|%.3s| | January |
|%10.3s| | January |
|%-10.3s| | January |
>重定向操作
此重定向将数据写入输出文件。如果输出文件不存在,那么它被创建。如果已经被创建将会覆盖之前的内容{ print \$1, \$2 > \$3 }
如果需要单独使用>需要加括号,比如不叫$2和$3的大小{print $1,($2 > $3)}
>>追加操作
这种重定向追加数据到输出文件output-file。如果输出文件不存在,那么它被创建。当使用这种类型的重定向时,新的内容被附加在文件的结尾。
|管道
通过管道来发送代替使用文件输出到另一个程序。这种重定向打开一个管道命令,并通过这个管道写入项的值,以另一种方法来执行命令。重定向参数命令实际上是一个AWK表达式。
awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'
HELLO, WORLD!!!
# print continents and populations, sorted by population
BEGIN { FS = "\t" }
{ pop[$4] += $3 }
END { for (c in pop)
printf("%15s\t%6d\n", c, pop[c]) | "sort -t'\t' +1rn"
}
Asia 2173
North America 340
Europe 172
South America 134(都是右对齐)
输出到标准错误文件中
print message I "cat 1>&2"
# redirect cat to stderr
system( "echo '" message "' 1>&2")
# redirect echo to stderr
print message > "/dev/tty"
# write directly on terminal
文件和管道靠名字识别
关闭文件和管道
close(expr)
close("sort -t'\t' +1rn")
- 可以在awk中打开一个管道,且同一时刻只能有一个管道存在。通过close()可关闭管道。如:awk '{print1, $2 | “sort” }’ test END {close(“sort”)}。awk把print语句的输出通过管道作为linux命令sort的输入,END块执行关闭管道操作。
|&双向通信
AWK可以通信使用一个外部进程|&
system函数可以在awk中执行linux的命令。
如:$ awk ‘BEGIN{system(“clear”)’;其返回值是命令的退出状态码,首先它会清除所有的缓冲区输出,然后启动一个/bin/sh实例执行命令,启动新进程。
fflush函数用以刷新输出缓冲区,如果没有参数,就刷新标准输出的缓冲区,如果以空字符串为参数,如fflush(“”),则刷新所有文件和管道的输出缓冲区。