awk学习笔记-4

来源:互联网 发布:php订单系统 编辑:程序博客网 时间:2024/06/15 15:04

输出重定向
        将awk的输出重定向到Unix/Linux文件时,会用到shell的重定向操作符。重定向的目标文件名必须用双引号扩起来(因为awk把字符串都看做变量,除非使用""括起来)。如果使用的重定向操作符为>,则文件被打开并清空。文件一旦被打开,就会保持直至显式关闭或awk程序终止。此后print语句的输出都将追加到文件尾部。符号>>也可用于打开文件,但是不清除文件内容,它只向文件追加内容。
#使用常量表示文件名

awk '$4 >= 70 {print $1,$2 >"passing_file" }' filename

#使用变量表示文件名

awk '$4 >= 70 {file="passing_file";print $1,$2 > file}' filename

#显式关闭打开的文件

awk -F '|' '{print $1,$2 >"l.txt";close("l.txt")}' a.txt

管道
        如果在awk程序中打开了管道,就必须先关闭它才能打开另一个管道。管道符右边的命令被括在双引号之间。每次就只能打开一个管道。

awk '{print $1,$2 | "sort -r +1 -2 +0 -1 "}' names

        如果打算再次在awk程序中使用某个文件或管道进行读写,则可能要先关闭程序,因为其中的管道会保持打开状态直至脚本运行结束。注意,管道一旦被打开,就会保持打开状态直到awk退出。因此,END块中的语句也会受管道的影响。

{ print $1,$2 | "sort -r +1 -2 +0 -1 " }  END{  close("sort -r +1 -2 +0 -1 ")  <rest of statements> }

说明:执行到END块时,管道被关闭。双引号中的字符串必须与最初打开管道的pipe命令字符串完全一致。
附注:sort 排序时,在对字段中的列进行编号时,缺省字段分隔符中的空格符将作为后继字段计数。前导空格不计作第一字段的一部分,-t 标志指定的字段分隔符将不作为字段的一部分计数。可使用 -b 标志忽略前导空格符。字段分隔符是否作为后继字段计数将直接影响到sort [ + [ FSkip ] [ .CSkip ] [ b ] [ d ] [ f ] [ i ] [ n ] [ r ] ] [ - [ FSkip ] [ .CSkip ]  [ -k KeyDefinition ]排序的结果。

关闭文件

        使用>或|对标准输出函数重定向后,有时需要在awk结束前显式关闭文件。

close(filename);close(置于管道符之后的command);

next语句
        next语句从输入文件中取出下一行输入,然后从awk脚本的顶部重新开始执行。类似于C语言中的continue。

{ if ($1 ~ /Peter/) {next}     else {print}  }

说明:如果某一行的第一个字段包含Peter,awk就跳过改行,从输入文件中读取下一行,然后从头开始执行脚本。

exit(ret)

说明:exit语句用于终止awk程序。它只能中断对记录的处理,不能跳过END语句。如果exit语句的参数是一个0-255之间的值(exit 1),这个值就会被打印在命令行上,以表明程序是否执行成功,并指出失败的类型。awk程序执行完成后,在shell中可以使用$?获取awk的执行结果。

system("Unix Command")

说明:awk的内置函数system以Unix/Linux的系统命令作为参数,执行该命令并且将命令的退出状态返回给awk程序。它很像C语言的一个标准库函数,该函数恰巧也为system()。注意,作为参数的Unix/Linux命令必须加双引号。

0 0
原创粉丝点击