您的位置:首页 > 运维架构 > Shell

shell学习7--awk的编程结构--BEGIN…

2014-10-08 15:42 316 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: