在awk程序中使用shell
在awk学习笔记(6)中我们已经简单的了解了管道符的用途,本文会用更多的例子来详述awk中使用管道符来接收shell传递过来的数据的处理。
例子一:取得系统当前登录人数
编写count.awk文件:
- BEGIN {
- while ( "who" | getline) n++
- print n
- }
执行:
- awk -f count.awk
输出:
- 3
我当前开着两个命令行窗口,加上mac系统的登录数,刚好是3个
上面的程序也可以直接在命令行中写:
- awk 'BEGIN {while("who"|getline) n++;print n}'
输出的结果是一样的。
解释:
who是shell命令,返回当前登录的记录;
getline一次取一行记录,成功就返回1,失败就返回-1;
n是变量,当成功读取了一条记录时就自加1;
while循环会遍历所有的登录记录;
最后print打印出总计数n到屏幕上。
例子二:取得当前目录的文件总数
- awk 'BEGIN {while("ls -a"|getline) n++;print n}'
输出:
- 51
这个例子跟上面的很像,只是shell命令带上了参数。
"ls -a"是列出当前目录下的所有文件,包含隐藏文件;
getline取一行记录,成功就返回1,失败返回-1;
n是计数变量;
while循环所有的记录;
print打印计数总数。
本文转自 ustb80 51CTO博客,原文链接:http://blog.51cto.com/ustb80/1035614,如需转载请自行联系原作者