通过以前我们讲解的知识,我们知道Unix awk的 getline语句用于简单地读取一条记录。如果用户有一个数据记录类似两个物理记录,那么getline将尤其有用。它完成一般字段的分离(设置字段变量$0 FNR NF NR)。如果成功则返回1,失败则返回0(到达文件尾)。如果需简单地读取一个文件,则可以编写以下代码:
例:示例getline的使用
- {while(getline==1)
- {
- #process the inputted fields
- }
- }
Unix awk也可以使getline保存输入数据在一个字段中,而不是通过使用getline variable的形式处理一般字段。当使用这种方式时,NF被置成0,FNR和NR被增值。
用户也可以使用Unix awk的 getline<"filename"方式从一个给定的文件中输入数据,而不是从命令行所列内容输入数据。此时,getline将完成一般字段分离(设置字段变量$0和NF)。如果文件不存在,返回-1,成功,返回1,返回0表示失败。
用户可以从给定文件中读取数据到一个变量中,也可以用stdin(标准输入设备)或一个包含这个文件名的变量代替filename。值得注意的是当使用这种方式时不修改FNR和NR。
另一种使用getline语句的方法是从Unix命令接受输入,例如下面的例子:
例:示例从Unix命令接受输入
- {while("who -u"|getline)
- {
- #process each line from the who command
- }
- }
当然,也可以使用如下形式:
"command" | getline variable
关闭文件:
Unix awk中允许在程序中关闭一个输入或输出文件,方法是使用Unix awk的close语句。
close("filename")
filename可以是getline打开的文件(也可以是stdin,包含文件名的变量或者getline使用的确切命令)。或一个输出文件(可以是stdout,包含文件名的变量或使用管道的确切命令)。
输出到一个文件:
Unix awk中允许用如下方式将结果输出到一个文件:
printf("hello word! ")>"datafile"
或
printf("hello word! ")>>"datafile"
输出到一个命令
Unix awk中允许用如下方式将结果输出到一个命令:
printf("hello word! ")|"sort-t','"
【编辑推荐】