您的位置:首页 > 运维架构 > Shell

awk(3)-awk getline

2017-07-11 17:16 204 查看
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")}'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux shell