awk(3)-awk getline

xiaoxiao2021-02-28  87

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")}'
转载请注明原文地址: https://www.6miu.com/read-75375.html

最新回复(0)