awk(3)-awk getline

awk getline  主要是打shell命令的数据传递给awk
当其左右无重定向符 | 或 < 时,getline作用于当前文件,读入当前文件的第一行给其后跟的变量var或$0(无变量);
当其左右有重定向符 | 或 < 时,getline则作用于定向输入文件

1、打印文件test 的第一行:
$ awk 'BEGIN{"cat test" | getline;print $0}'             读取一行,没有变量,默认赋值$0
$ awk 'BEGIN{"cat test" | getline line;print line}'      读取一行,赋值给变量line
$ awk 'BEGIN{getline d < "test"; print d}'               从文件读取一行,赋值给变量d
$ awk 'BEGIN{getline < "test"; print $0}'

2、打印所有的行,在上面的命令中使用循环:
$ awk 'BEGIN{while("cat test" | getline) print $0}'
$ awk 'BEGIN{while("cat test" | getline d) print d}'
$ awk 'BEGIN{while(getline < "test") print $0}'
$ awk 'BEGIN{while(getline d < "test") print d}'      注意awk 中使用变量是直接使用,不用加 $ 符号

3、getline 条件不是BEGIN
$ awk '{getline; print $0"#"$4}' test
运行过程:
1)、awk 读取一行数据,开始执行
2)、getline 读取下一行数据,替换了$0,$1,$2....(有的版本awk,不支持动态更新$0,或者更新了$0,不更新$1,$2 的值。可以改用gawk或者nawk,也可以使用awk的split 函数处理)。这时打印的$0 ,$4 就是下一行数据。
3)、然后awk再读取一行数据,接着又执行了第二步。所以打印的只是文件的偶数行。

4、接收用户输入
4.1、提示用户输入
$ awk 'BEGIN{print "input sth";getline var <"-" ; print var}'   # 其中 "-" 就是标准输入

5、可以使用system("系统命令") 也可以是自定义函数,但是shell 命令和awk 之间不能传送数据,所以只能用在处理单独的系统数据。
示例:把date 命令的标准输出重定向到date.log 文件
$ awk 'BEGIN{system("date > date.log")}'

猜你喜欢

转载自blog.csdn.net/convict_eva/article/details/74989777
awk