● 输出重定向
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函数用于读取下一输入行,并且设置内置变量NF、NR和FNR。如果读到一条记录函数就返回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块。
|