发新话题
打印

Awk各部分详解-重定向(14)

Awk各部分详解-重定向(14)

         输出重定向

    Awk输出重定向到文件时,会用到shell的重定向操作符。重定向的目标文件名,必须用双括号括起来。如果使用的重定向操作符为>,则文件被打开并清空。文件一旦被打开,就会保持打开状态直至显示关闭或awk程序终止。此后print语句的输出都将追加到文件尾部。符号>>也用于打开文件,但是是向文件追加内容。

范例 3-25
[root@localhost script]# awk -F ':' '$3 == 0 {print "Your UID is:"$3 > "test_file"}' passwd
[root@localhost script]# ls
passwd
passwd_1
test_file

[root@localhost script]# cat test_file
Your UID is:0
### 解析 ###
如果记录的第3字段的值等于0,则打印字符串“Your UID is:”,然后输出第3字段的值到test_file文件中。


         输入重定向

    getline函数用于从标准输入、管道或文件(非当前处理的文件)读取输入。Getline函数用于读取下一输入行,并且设置内置变量NFNRFNR。如果读到一条记录函数就返回1,如果读到EOF(end of file,文件末尾)则返回0。如果发生错误,比如打开文件失败,则getline函数返回-1

范例 3-26
[root@localhost script]# awk 'BEGIN{"id" | getline d; print d'} passwd
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:system_r:unconfined_t
### 解析 ###
先执行id命令,将输出通过通道发给getline函数,再通过getline将传来的内容赋值给用户自定义的变量d,然后打印d
范例 3-27
[root@localhost script]# awk 'BEGIN{"date" | getline d; split(d,mon); print mon[2]}'
3
### 解析 ###
先执行date命令,将输出通过管道发给getline,接着,getline从管道读取输入,然后保存在用户自定义变量d中。Split函数从d中生成一个名为mon的数组。最后,程序打印出数组mon的第2个原数。
范例 3-28
[root@localhost script]# awk 'BEGIN{while("ls" | getline)print}'
passwd
passwd_1
test_file
### 解析 ###
ls命令的输出将传递给getline;每循环一次,getline就从ls的输出中读取一行,并将其显示到屏幕上。不需要输入文件,因为awk会在文件打开之前先处理完BEGIN块。



№→  Learning 《Perl Programming》

TOP

发新话题
版块跳转 
Powered by Discuz! 6.1.0 © 2001-2007 Comsenz Inc.
---------------------------------------------------------------------------------------
本论坛所有文章为会员所发布,会员拥有该内容的所有权力及责任,转载时请注明出处!
站务管理员:我心飞翔 QQ:12012805(请直奔主题) 有害信息举报电话 15914350818
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触和有损学校声誉不属实的言论!
粤ICP备06054096号 茂名市公安局网警支队备案: 4409813060501

Processed in 0.047679 second(s), 9 queries, Gzip enabled.