1.BEGIN模块:这个模块包括了一个操作块(也就是"{ }"内的内容)。该操作块是在文件输入之前执行的,也就是不需要输入任何文件数据,也能执行该模块。
BEGIN模块常用于设置修改内置变量如(OFS,RS,FS等),为用户自定义的变量赋初始值或者打印标题信息等。
BEGIN模块中的语句操作以“;”标志或者分行隔开。
eg:awk 'BEGIN{print "Hello World! Begin doing!"}' #输出字符串
2. END模块:与BEGIN模块相反,是处理完文件后的操作。不匹配任何输入行,常用于输出一些总结信息。
awk '/mary/{count++}END{print "mary was found " count "times."}' file1
#输出找到“mary”的次数
总结一下:awk基本结构为 : BEGIN{BEGIN操作} {文件行处理块} END{END操作 }
3.重定向:
输出重定向:awk的输出重定向操作符与shell的输出重定向操作符相同。
注意:重定向的目标文件必须用双引号括起来。
目标文件打开就一直保持打开状态直到 显式关闭或者awk程序终止。
> 覆盖目标文件内容
>> 追加到目标文件后面
awk '$4>=70{print $1,$2 >"tmpfile"}' file1
输入重定向:使用getline函数,该函数用于从标准输入、管道或者文件(非当前处理的文 件)读取输入。
注意:如果文件不存在,getline的值是-1,读到文件尾则返回0,读到行返回1。
awk 'BEGIN{"date" | getline d; print d}' file1
awk 'BEGIN{while(getline < "/etc/passwd" >0) lc++; print lc}' file
#读取/etc/passwd的行数
4. 管道:如果在awk中打开了管道命令,就必须先关闭它才能打开另一个管道。管道右边的命令必须括在双引号之间。awk中每次只能打开一个管道。
awk '{print $1,$2 |"sort -r +1 -2 +0 -1"}' file1
5.显式关闭文件和管道:如果awk程序打算再次使用某个文件或者再打开一个管道进行读写时,可能会显示无效。这个主要用于不影响EDN模块中的文件操作和管道命令。
(In script)
{ print $1,$2,$3 | "sort -r +1 -2 +0 -1"}
END{
close("sort -r +1 -2 +0 -1")
注意:关闭的管道命令必须与打开时的一模一样。
6.system函数:用于在awk中运行shell脚本或命令
awk ‘BEGIN{ system("clear")}' #运行shell的清屏命令clear
shell之awk的编程结构--BEGIN/END/重定向/管道
最新推荐文章于 2024-07-28 22:43:21 发布