awk 程序中使用 Shell 命令
2013-05-05 20:00
429 查看
awk程序中允许呼叫Shell指令. 并提供管道解决awk与系统间数据传递的问题. 所以awk很容易使用系统资源.主要有两种方式:
a. 语法] awk output 指令 | "Shell 接受的命令"( 如 : print $1,$2 | "sort -k 1" )[b. 语法] "Shell 接受的命令" | awk input 指令( 如 : "ls " | getline)
注 :
awk input 指令只有 getline 一个.
awk output 指令有 print, printf() 二个.
在a 语法中, awk所输出的数据将转送往 Shell , 由 Shell 的命令进行处理.以上例而言, print 所输出的数据将经由 Shell 命令 "sort -k 1" 排序后再送往屏幕(stdout).
上例awk程序中, "print$1, $2" 可能反复执行很多次, 其输出的结果将先暂存于 pipe 中,等到该程序结束时, 才会一并进行 "sort -k 1".
须注意二点 :
1、不论 print $1, $2 被执行几次, "sort -k 1" 的执行时间是 "awk程序结束时",
2、"sort -k 1" 的执行次数是 "一次".
在 b 语法中, awk将先调用 Shell 命令. 其执行结果将通过 pipe 送入awk程序,以上例而言, awk先让 Shell 执行 "ls",Shell 执行后将结果存于 pipe, awk指令 getline再从 pipe 中读取数据.
使用本语法时应留心: 以上例而言,awk "立刻"调用 Shell 来执行 "ls", 执行次数是一次.
getline 则可能执行多次(若pipe中存在多行数据).
例子:对进程PID进行排序
ps -ef|awk '{print $2|"sort -n"}'
将awk的结果pid值,存到pipe中当程序结束时一次性传给“sort -n”来进行排序,并输出到标准输出,此外可以调用close(“sort -n”)来关闭“sort -n”前的pipe并立刻将“sort -n”交给shell执行。
例子:打印在线人数
awk 'BEGIN{while ("who"|getline) n++;print n}'
打印当前的在在线人数
说明:awk不一定要处理文件,BEGIN会在尚未开启任何输入文件前,被执行一次,awk把“|”管道符号前面的字符串当成shell上的命令,并将命令送往shell,执行结果则由pipe送进awk程序中,getline为awk的提供的输入指令
语法 | 由何处读取数据 | 数据读入后置于 |
getline var < file | 所指定的 file | 变量 var(var省略时,表示置于$0) |
getline var | pipe 变量 | 变量 var(var省略时,表示置于$0) |
getline 一次读取一行数据, 若读取成功则return 1, 若读取失败则return -1, 若遇到文件结束(EOF), 则return 0(false)
相关文章推荐
- 【译】 AWK教程指南 6在AWK程序中使用Shell命令
- 使用Python生成Shell命令,批量执行程序代码解析
- 使用shell脚本ssh远程执行命令,使用awk时总是报错
- awk的使用 第五部分 在awk中使用shell命令
- 使用bat命令或shell脚本调用java程序
- shell脚本使用ssh命令连接主机,自动创建目录,分发程序,执行命令
- 使用命令shell和MyEclipse两种方式执行Hadoop的WordCount程序
- shell awk命令使用
- 使用AWK在shell中生成日历的小程序
- linux 使用 java 程序执行 shell命令
- C程序获取shell脚本命令输出,使用popen()函数
- Linux下使用Shell命令控制程序后台执行
- awk中使用的shell命令
- 使用shell命令将程序下载到开发板
- awk中使用shell命令的方法
- awk中使用shell命令
- 转变思维--使用Python生成Shell命令,批量执行程序
- awk中使用的shell命令-浅记
- awk中可以使用system来执行复杂的shell命令
- awk命令之 - 统计/etc/passwd文件中各用户所使用的shell类型及出现次数