锁定老帖子 主题:awk平时使用心得
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-07-09
aaa 6 2、awk '{a[$0]++}END{l=asorti(a);for(i=1;i<l;i++)print a[i]}' exe2 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 4、什么是NR和FNR NR: 当前所有文件的当前记录数。 NR - Number of Record - 当前处理的行是第几行(因为awk是流处理工具,一行一行处理的,所以NR在不停的自增1) (NR==FNR) 大致等效于 (ARGIND==1) , 前者就是说当然处理的总行数跟文件内行数相等,而这种情况一般来说都是在第一个文件上,而ARGIND==1是参数位置第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 [解析] 首先明白按最后一个域排序,即把最后一个域做为下标,把该行的值存入数组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中的赋值打印出来。
awk '{a[$1]+=$2}END{for(i in a){print i,a[i]}}' file
awk '{a[$1]+=$2}END{l=asorti(a,b);for(i=1;i<=l;i++){print b[i],a[b[i]]}}' file 7、awk 'BEGIN{info="it is a test";lens=split(info,tA," ");print length(tA),lens;}' 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 1750 次