AWK学习笔记-2.4Output输出

Output输出

awk的输出分隔符由OFS(列分隔符,默认空格” “)和ORS(行分隔符,默认换行”\n”)决定

输出函数意义
print
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 和 print$0 一样
  • print “”输出空行

output Into Files

格式空值字符

与c语言类似。

符号
cASCII character
ddecimal integer 十进制
e[-]d.ddddddE[+-]dd 科学计数法
f[-]ddd.dddddd 浮点数
g输出格式为f格式或e格式,系统根据数据占宽度m大小,自动选择占宽度较小的某种格式输出,g格式符不输出小数点后无意义的零
ounsigned octal number 无符号8进制
sstring 字符串
xunsigned hexadecimal number 无符号16进制
%%%用来转义,输出%

Example(书上的例子)

fmt 1|printf(fmt, 1)
%c97
%d97.5
%5d97.5
%e97.5
%f97.5
%7.2f97.5
%g97.5
%.6g97.5
%o97
%06o97
%x97
|%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(“”),则刷新所有文件和管道的输出缓冲区。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值