`

awk平时使用心得

    博客分类:
  • awk
阅读更多


1、cat exe1 | awk '{a[$1]+=$2}END{for(i in a) print i,a[i]}'

aaa 6
bbb 2
ccc 4

2、awk '{a[$0]++}END{l=asorti(a);for(i=1;i<l;i++)print a[i]}' exe2
a
aa
bb
cc
d
dd
e
f
ff
k
mm
nn

3、[@83_20 exercise]$ awk '{a[$1]++}END{l=asorti(a,b);for(i=1;i<l;i++)print b[i],a[b[i]]}' exe3     
aa 2
bb 2
cc 3
dd 4
mm 2
nn 1

4、什么是NR和FNR
比如现在AWK处理到第五行。第一行没有进行操作,2,3,4,5行进行了操作,那么NR=5,FNR=4
 NR==FNR 表示从起始行到当前行,awk都进行了操作,比如修改,添加等等
简单来说,NR就是当前读取多少行,FNR就是当前修改了多少行,FNR<=NR

NR: 当前所有文件的当前记录数。
FNR:当前文件的当前记录数.

NR - Number of Record - 当前处理的行是第几行(因为awk是流处理工具,一行一行处理的,所以NR在不停的自增1)
FNR - File Number of Record - 当前处理的行是当前处理文件的第几行
NF - Number of Fileds - 当前行有多少列数据(这个在每行都会根据设定的分割符重新计算,默认分割符是任务长个空白符)

(NR==FNR) 大致等效于 (ARGIND==1) , 前者就是说当然处理的总行数跟文件内行数相等,而这种情况一般来说都是在第一个文件上,而ARGIND==1是参数位置第1的文件时生效。
<也有可能前面的文件是空的,那么NR==FNR就生效于第一个非空文件,这就是跟ARGIND==1的明显区别>

5、[@83_20 exercise]$ awk '{a[$NF]=$0}END{l=asorti(a,b);for(i=1;i<=l;i++)print i"\t"b[i]"\t"a[b[i]]}' exe4
1       12      78 90 12
2       56      12 34 56
3       89      23 45 89

[解析]

  首先明白按最后一个域排序,即把最后一个域做为下标,把该行的值存入数组a,本案文本是3行,执行完后得到如下内容:

  a[56]=12 34 56

  a[12]=78 90 12

  a[89]=23 45 89

END,在最后执行命令,asorti对数组a的下标进行排序,并把排序后的下标存入新生成的数组b中,并把数组a的长度赋值给变量l。然后必须用for循环取出数组的下标,因为数组是无法直接print打印的,这时候打印输出变量i,排序后的数字b的下标的值,然后把该下标在数组a中的赋值打印出来。
内置函数asort只对值进行排序,会丢掉原来的数组值


6、aaa 1
aaa 3
ccc 12
aaa 8
bbb 89
ccc 16
eee 12
ccc 11
eee 13
fff 16
ddd 56
要求对以上文本按第一列的名称进行第2列的求和,并且按升序排列打印。

 

awk '{a[$1]+=$2}END{for(i in a){print i,a[i]}}' file
aaa 12
ccc 39
eee 25
bbb 89
ddd 56
fff 16
[解析]
  把$1为下标,把$2的值累加到以$1为下标的数组a的值上,然后用for(i in a)这最普通的常用的方式取出数组中的下标和其对应的值,但是这种方式是随机取出的。怎么能达到升顺输出呢?我们看下面的例子。


 

awk '{a[$1]+=$2}END{l=asorti(a,b);for(i=1;i<=l;i++){print b[i],a[b[i]]}}' file
aaa 12
bbb 89
ccc 39
ddd 56
eee 25
fff 16
[解析]
  第一部分操作和上句一样,只是后面增加了awk的内置排序的函数asorti,然后通过for循环顺序依次取出a数组的下标和对应的值。

7、awk 'BEGIN{info="it is a test";lens=split(info,tA," ");print length(tA),lens;}'
8、awk 'BEGIN{info="this is a test2012test!";gsub(/[0-9]+/,"!",info);print info}'
9、cat exe4 exe5 | sort -n -k1 | awk 'NR%2==1{fd1=$2"\t"$3;next}{print $0"\t"fd1}'
10、awk 'NR==FNR{a[$0]=1;print} NR>FNR{if(!(a[$0])){print}'} aa1 bb1   【两文件的交集】

分享到:
评论

相关推荐

    AWK AWK 详细使用文档

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

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

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

    awk set 使用手册

    awk set 使用手册

    awk使用手册awk使用手册

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

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

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

    Unix awk使用手册

    这是一本关于Unix awk的使用手册,详细的介绍了如何使用awk编写程序,提取有用的数据!

    AWK使用简介.pdf

    AWK使用简介.pdf AWK使用简介.pdf AWK使用简介.pdf AWK使用简介.pdf

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

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

    awk使用基本理论

    linux shell三剑客之一 awk使用基本理论 awk有3个不同版本: awk、nawk和gawk

    AWK详细文档 使用手册

    Awk 实例 第 1 部分 AWK较详细文档.htm awk如何匹配以#开头的字符串? Unix awk使用手册 Unix awk使用手册.htm

    awk使用手册,awk使用手册

    Awk 是一种非常好的语言,同时有一个非常奇怪的名称。在本系列(共三篇文章)的第一篇文章中,Daniel Robbins 将使您迅速掌握 awk 编程技巧。随着本系列的进展,将讨论更高级的主题,最后将演示一个真正的高级 awk ...

    awk使用手册

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

    awk 使用手册

    awk的入门文档,不错的资料。详细说明了awk的使用

    Shell AWK使用手册

    SHELL AWK使用手册,供大家参考学习

    sed和awk使用实例

    sed和awk使用的几个经典实例,都是比较典型的,可能经常会用到

    awk入门到精通.pdf

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

    调优,AWK使用

    AWK使用,系统调油章节,gnuplot绘图工具,存储的结构以及分类区别

    awk教程-awk教程.rar

    awk 入门教程_阮一峰的网络日志.pdf 每天学习一个命令:awk 处理文本.pdf 在Window中使用 AWK.pdf

    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

Global site tag (gtag.js) - Google Analytics