awk调用shell命令 getline system
来源:互联网 发布:mac看网页图片下一张 编辑:程序博客网 时间:2024/06/07 01:44
在awk内部可利用管道和getline函数来调用shell命令,并可得到返回的具体结果,进行相应处理
当 Pattern 为 BEGIN 或 END 时, getline 将由 stdin 读取数据, 否则由awk正处理的数据文件上读取数据.
getline 一次读取一行数据, 若读取成功则return 1, 若读取失败则return -1, 若遇到文件结束(EOF), 则return 0;
可以使用 getline 所 return 的数据来做为 while 判断循环停止的条件,某些awk版本较旧,并不容许使用者改变 $0 之值. 这种版的 awk 执行本程序时会产生 Error, 读者可于 getline 之后置上一个变量 (如此, getline 读进来的数据便不会被置于 $0 ), 或直接改用gawk便可解决.
awk程序中可接受下列两种语法:
[a. 语法] awk output 指令 | "Shell 接受的命令" ( 如 : print $1,$2 | "sort -k 1" )
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". 不论 print $1, $2 被执行几次, "sort -k 1" 的执行时间是 "awk程序结束时", "sort -k 1" 的执行次数是 "一次".
linux:/home/lxg # cat awk2.txt aaa 12bbb 4ccc 9linux:/home/lxg # cat awk2.txt | awk '{print $1,$2 | "sort -nk 2"}'bbb 4ccc 9aaa 12linux:/home/lxg # cat awk2.txt | awk '{print $1,$2}' | sort -nk 2bbb 4ccc 9aaa 12linux:/home/lxg #
[b. 语法] "Shell 接受的命令" | awk input 指令 ( 如 : "ls " | getline)
awk将先调用 Shell 命令. 其执行结果将通过 pipe 送入awk程序,以上例而言, awk先让 Shell 执行 "ls",Shell 执行后将结果存于 pipe, awk指令 getline再从 pipe 中读取数据. 使用本语法时应留心: 以上例而言,awk "立刻"调用 Shell 来执行 "ls", 执行次数是一次. getline 则可能执行多次(若pipe中存在多行数据).
linux:/home/lxg # awk 'BEGIN{while(getline line < "awk1.txt"){print line}}'web01[192.168.2.100]httpd oktomcat oksendmail okweb02[192.168.2.101]httpd okpostfix okweb03[192.168.2.102]mysqld okhttpd ok linux:/home/lxg # awk 'BEGIN{ while( system("ls -l") | getline line ){ print line } }'total 7813824-rw-r--r-- 1 root root 134 Jul 16 15:10 awk1.txt-rwxr-xr-x 1 root root 250 Jul 12 13:01 c.py-rw-r--r-- 1 root root 50 Jul 13 14:46 err.txt-rw-r--r-- 1 root root 30 Jul 13 14:59 in.txt-rw-r--r-- 1 root root 55 Jul 13 14:51 log.txt-rw-r--r-- 1 root root 525752 Jul 11 17:45 phone.txtdrwxr-xr-x 2 root root 516096 Jul 12 12:15 phone_sample-rw-r--r-- 1 root root 7991494657 Jul 12 13:17 phone_sample.tar.gz-rw-r--r-- 1 root root 5 Jul 13 14:46 r.txt-rw-r--r-- 1 root root 556812 Jul 12 11:54 samplelist.txt-rw-r--r-- 1 root root 393348 Jul 12 10:32 samplelist2.txtsh: 0: command not foundlinux:/home/lxg # awk 'BEGIN{ while("ls -l"| getline line >0){ print line } }'total 7813824-rw-r--r-- 1 root root 134 Jul 16 15:10 awk1.txt-rwxr-xr-x 1 root root 250 Jul 12 13:01 c.py-rw-r--r-- 1 root root 50 Jul 13 14:46 err.txt-rw-r--r-- 1 root root 30 Jul 13 14:59 in.txt-rw-r--r-- 1 root root 55 Jul 13 14:51 log.txt-rw-r--r-- 1 root root 525752 Jul 11 17:45 phone.txtdrwxr-xr-x 2 root root 516096 Jul 12 12:15 phone_sample-rw-r--r-- 1 root root 7991494657 Jul 12 13:17 phone_sample.tar.gz-rw-r--r-- 1 root root 5 Jul 13 14:46 r.txt-rw-r--r-- 1 root root 556812 Jul 12 11:54 samplelist.txt-rw-r--r-- 1 root root 393348 Jul 12 10:32 samplelist2.txtlinux:/home/lxg #
- awk调用shell命令 getline system
- awk调用shell命令与getline和system函数
- awk调用shell命令与getline和system函数
- awk调用shell命令与getline和system函数
- awk调用shell命令
- awk+system+getline
- awk getline命令解析
- awk内部调用shell命令 -- shell
- awk内部调用外部shell命令
- awk 笔记 2 调用shell命令
- Linux中awk之getline命令
- awk调用shell函数
- linux shell awk 命令
- awk执行shell命令
- Linux Shell 命令--awk
- shell awk命令
- shell中的AWK命令
- Shell 中的awk命令
- 中图分类号
- OpenGL 鼠标3D旋转简单实现
- WorldWind学习系列五:插件加载过程全解析
- win7下开启梦幻桌面
- vmware and vs
- awk调用shell命令 getline system
- C中使用python函索
- 某算法
- 谈一谈自己对依赖、关联、聚合和组合之间区别的理解
- VS2003下的预生成事件“失效”
- Mysql ON 子句和 USING 子句
- 学习笔记(十五)
- WorldWind学习系列六:渲染过程解析篇
- juniper 查看端口光功信息