shell之awk的编程结构--BEGIN/END/重定向/管道
2016-07-26 16:06
465 查看
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
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中的"2>&1"是什么意思?
- [shell基础]——整数比较;字符串比较;文件测试;逻辑测试符
- linux利用shell实现守护进程的脚本
- PowerShell 处理交换机端口信息
- php运行shell
- 使用sh -x调试shell脚本
- [shell基础]——数组
- Shell运算符
- PowerShell 编辑器快捷键
- Shell脚本学习心得
- shell脚本中read用法
- 更改linux系统的SHELL
- shell的基本语法
- Shell Scripts
- 常用的shell命令汇总 Linux基础
- How do I tell if a regular file does not exist in bash?
- 4 Bash If Statement Examples ( If then fi, If then else fi, If elif else fi, Nested if )
- linux shell if 语句写法
- Windows下利用git bash生成密钥
- Linux下profile和bashrc四种的区别