`

awk getline

阅读更多
awk getline开始一直用做按行读取文件。
getline还有其他一些比较好用的功能,他可以集成shell命令,而不使用system就可以
做到:
比如想删除一个文件a里面按行存放的文件名得所有文件,那么在awk里面可以使用:
awk '{cmd="rm "$0|getline} a


下面是转自:http://bbs.chinaunix.net/thread-108596-1-1.html
的一些用法介绍:
1、getline用法简介:
getline 是awk里用于输入重定向的一个函数,他可以从标准输入/一个管道/文件读取输入, 而不只是从当前被处理的文件来处理, 他取得输入的下一行并给NF,NR,FNR等内制变量置值, 如果找到一条记录则getline返回1,如果到了文件结束(EOF)则返回0,如果错误则返回-1
man bash: search about getline
getline < file sets $0 to the next record from
      file.  getline x sets variable x instead.
...
In all cases, getline returns 1 for a
      successful input, 0 for end of file, and -1 for an error.
awk的 getline语句用于简单地读取一条记录。如果用户有一个数据记录类似两个物理记录,那么getline将尤其有用。它完成一般字段的分离(设置字段变量$0 FNR NF NR)。如果成功则返回1,失败则返回0(到达文件尾)。如果需简单地读取一个文件,则可以编写以下代码:
例:示例getline的使用
{while(getline==1)
{
#process the inputted fields
}
}

也可以使getline保存输入数据在一个字段中,而不是通过使用getline variable的形式处理一般字段。当使用这种方式时,NF被置成0,FNR和NR被增值。
用户也可以使用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
例如:

/home/lee#awk 'BEGIN{"date"|getline var;split(var,a);print a[4]}'
16:46:26
/home/lee#awk 'BEGIN{getline name<"/dev/tty";print "yourname:"name}'
lee
yourname:lee

getlin在不同环境下设置的值:
-------------------------------------------------
形式                            设置
-------------------------------------------------
getline                        $0,NF,NR,FNR
getline var                    var,NR,FNR
getline<file                   $0,NF
getline var<file               var
"cmd"|getline                  $0,NF
"cmd"|getline var              var


==================================================================================
2、getline 用法举例:
#awk中getline获取shell命令的执行结果(不是返回值)
June@~ 21:34:59>
echo |awk '{"echo \"1 + 2\"|bc"|getline v;print v}'
3
June@~ 21:35:02>
注意:awk中使用管道调用shell命令结束后一定要close("cmd")
案例分析请见: http://hi.baidu.com/leejun_2005/blog/item/88f7b9838e794785f703a60b.html

通过在awk内使用管道,可以把shell命令的输出传送给awk
$ awk 'BEGIN{ "date" | getline date; print date; }'
Sun Mar 8 22:21:52 2009

#getline的状态返回值可以被赋值
awk '{if($6!~/6/){tmp=$0}if($6~/6/){c=getline s;if(c==0)s="";print tmp,$0,s}}' file 

awk getline接收用户输入,有两种形式:
getline string  < "/dev/tty"
getline string  < "-"
1)提示用户输入参数getline:awk 'BEGIN{print "input sth";getline var <"-" ; print var}'  # 其中 "-" 就是标准输入,很多工具都支持 "-" ,比如tar/cat等。
2)获取awk脚本的位置参数:awk 'BEGIN{print ARGV[1],ARGV[2]}' a b

getline怎样保存shell的全部输出:
awk 'BEGIN{srs=RS;RS="";"ls ./" | getline TMP;RS=srs;print TMP}'

getline直接读取文件,注意BEGIN是预处理部分,不是action部分,此时还没有准备处理文件,指针也没有指向文件第1行,在执行过程中也不会移动文件指针的。简单的说就是BEGIN部分awk是没有指针的,此时只有getline指针,awk只在 { } action部分有指针处理。
awk 'BEGIN{while (getline d<"aa") print d}'

seq 10|awk '{getline d<"aa";print d}'   #如果getline直接读一个文件,那么就是逐行读取的,因为此时只有getline指针,而没有awk指针来处理该文件。


getline打印偶数行:
seq 10 | awk '{getline;print}'  # 注意这个和 seq 10 | awk 'BEGIN{while(getline)print}' 有区别!
June@~ 23:07:23>
seq 10 | awk 'i++%2'
2
4
6
8
10
June@~ 23:07:27>

awk getline两行互换:
seq 10 | awk '{if(getline tmp)print tmp;print}'   #一般就是判断getline的返回值 > 0 的
2
1
4
3
6
5
8
7
10
9

awk中通过system也可执行shell命令:system会返回状态码
awk 'BEGIN{ system("ls -l") }'
ps:system里面也可以利用awk的变量:system("echo ", $1)
分享到:
评论

相关推荐

    awk学习awk学习awk学习awk学习

    awk学习awk学习awk学习awk学习awk学习awk学习awk学习

    awk用法小结--有关awk的材料

    awk用法小结 - - - by ruson 2006.4 NTU 1. awk非常适合于结构化的文本文件(行、列数据)复杂...Solaris下建议用nawk,因为旧awk有很多功能不支持,例如数学运算幂 ^ ,函数getline,system等。 总结的很有条理。

    awk入门到精通.pdf

    此外, awk内建有pipe的功能, 可将处理中的数据传送给外部 的 Shell命令加以处理, 再将Shell命令处理后的数据传回awk程序, 这个特点也使得awk程序很 容易使用系统资源. 由于awk具有上述特色, 在问题处理的过程中, 可...

    AWK用法AWK用法AWK用法

    awk ‘/101/’ file 显示文件file中包含101的匹配行。 awk ‘/101/,/105/’ file awk ‘$1 == 5′ file awk ‘$1 == “CT”‘ file 注意必须带双引号 awk ‘$1 * $2 &gt;100 ‘ file awk ‘$2 &gt;5 && $2&lt;=15' file

    Awk入门教程 《Awk A Tutorial and Introduction - by Bruce Barnett》

    The Getline function The systime function The Strftime function User Defined Functions AWK patterns Formatting AWK programs Environment Variables ARGC - Number or arguments (NAWK/GAWK) ARGV - ...

    学习和理解AWK的最佳书籍Effective AWK Programming

    学习和理解AWK的最佳书籍  一致这本书是学习awk的最好书籍,网上下不到的,国内也买不到。国家图书馆和北京大学图书馆都有。强烈建议所有想学awk的同志们阅读(会有很多awk语言之外的启迪) 偶然机会得到,不敢独享...

    AWK AWK 详细使用文档

    AWK 详细使用文档 AWK 详细使用文档 AWK 详细使用文档

    awk参考资料下载awk

    awk参考资料, awk参考资料详情.

    awk使用手册

    你可能对UNIX比较熟悉,但你可能对awk很陌生,这一点也不奇怪,的确,与其优秀的功能相比,awk还远没达到它应有的知名度。awk是什么?与其它大多数UNIX命令不同的是,从名字上看,我们不可能知道awk的功能:它既不是...

    awk详细用法小结awk awk

    因为遇到了awk问题,所以找到这个小结,共享一下

    sed_awk.chm

    This book is about a set of oddly named UNIX utilities, sed and awk. These utilities have many things in common, including the use of regular expressions for pattern matching. Since pattern matching ...

    awk入门级教材awk入门awk入门

    awk 是一门编程语言,它的基本操作是在一组文件上查找模式,并在包含这些模式实例的那 些行或字段上进行指定的动作。awk 使得特定数据的选择和变换操作更易于表达

    linux awk详解awk详解awk详解awk详解

    awk详解awk详解awk详解awk详解awk详解awk详解awk详解awk详解awk详解

    awk的详细介绍,awk的使用介绍

    awk的详细介绍,awk的使用介绍,awk的使用教程,awk的学习宝典

    Oracle ass.awk工具

    ass.awk工具用在数据库hang住时分析收集到的systemstate所用,可以清晰明了的查看systemstate中的信息; 命令简单: $ awk -f ass1033.awk [trace_name_file] 在系统hung的时候,systemstate基本等同于hanganalyze...

    windows 下的awk 命令工具

    windows 下的awk 命令工具

    awk实例详解——Unix下awk的使用

    精通awk命令 Unix awk使用手册.htm awk.pdf

    linux环境下awk开发

    你可能对UNIX比较熟悉,但你可能对awk很陌生,这一点也不奇怪,的确,与其优秀的功能相比,awk还远没达到它应有的知名度。awk是什么?与其它大多数UNIX命令不同的是,从名字上看,我们不可能知道awk的功能:它既不是...

    AWK手册 中文帮助文档

    AWK中文帮助文档,包含awk详细讲解以及实例程序

    awk使用手册awk使用手册

    $awk '/sun/{print}' mydoc 由于显示整个记录(全行)是awk的缺省动作,因此可以省略action项。 $awk '/sun/' mydoc 例:下面是一个较为复杂的匹配的示例: $awk '/[Ss]un/,/[Mm]oon/ {print}' myfile

Global site tag (gtag.js) - Google Analytics