awk循环处理文本进行统计
2016-02-26 11:34
281 查看
由于awk对于标准格式文本可以快速分割,因此我有时候懒得用python再去写更长的脚本去做一些简单的统计和打印工作。
比如,现有文本为对一些符号的分类:
pre_groups:CH_DTL = z c s ì
pre_groups:CH_RTR = Z C S r î
用集合的语言来说,我希望,该分类满足:
1. 完备性:所有的元素必须属于某一个分类。
2. 唯一性:所有的元素仅能属于一个分类,而不是多个。
那么,我将使用awk进行快速统计,然后查看:
1. 每个元素是否只出现一次。
2. 所有出现的元素的个数与总元素个数是否相同。
awk可以帮我们第一点。
使用的命令为:
cat 1.txt | sed -r -e 's/^.*= //g' | sed -r -e 's/ $//g' | awk -f stat_phoneme.awk > phon_stat.log
其中,awk的文件内容为:
{for( i=1; i<= NF; i++) Number[$i]++ }
END { for( phon in Number) printf("%-10s %d\n", phon, Number[phon] )}
注意:
1. 如果文件的分割符不是默认的空格,那就用-F选项(不是-f)来指定一个或者多个符号作为分隔符,比如 -F"[,;]",表示逗号和冒号都是分割符,如果仅用逗号,则-F","
2. BEGIN和END后的语句仅执行一次,其中前者是在逐行处理输入之前进行,后者是在处理完每行输入之后进行。所以,如果把处理每行数据看做是个循环的话,那么BEGIN主要可以用来设置一下全局变量,而END则可以用来对处理结果进行统计分析和输出等。
3. NF:全局变量,表示每一行的字段的数目。$0表示该行的内容,$1表示该行第一个字段,以此类推。
4. Number[$1]:这是个类似于python的字典的东西,但是它其实是个数列,只是可以这样用而已。
比如,现有文本为对一些符号的分类:
pre_groups:CH_DTL = z c s ì
pre_groups:CH_RTR = Z C S r î
用集合的语言来说,我希望,该分类满足:
1. 完备性:所有的元素必须属于某一个分类。
2. 唯一性:所有的元素仅能属于一个分类,而不是多个。
那么,我将使用awk进行快速统计,然后查看:
1. 每个元素是否只出现一次。
2. 所有出现的元素的个数与总元素个数是否相同。
awk可以帮我们第一点。
使用的命令为:
cat 1.txt | sed -r -e 's/^.*= //g' | sed -r -e 's/ $//g' | awk -f stat_phoneme.awk > phon_stat.log
其中,awk的文件内容为:
{for( i=1; i<= NF; i++) Number[$i]++ }
END { for( phon in Number) printf("%-10s %d\n", phon, Number[phon] )}
注意:
1. 如果文件的分割符不是默认的空格,那就用-F选项(不是-f)来指定一个或者多个符号作为分隔符,比如 -F"[,;]",表示逗号和冒号都是分割符,如果仅用逗号,则-F","
2. BEGIN和END后的语句仅执行一次,其中前者是在逐行处理输入之前进行,后者是在处理完每行输入之后进行。所以,如果把处理每行数据看做是个循环的话,那么BEGIN主要可以用来设置一下全局变量,而END则可以用来对处理结果进行统计分析和输出等。
3. NF:全局变量,表示每一行的字段的数目。$0表示该行的内容,$1表示该行第一个字段,以此类推。
4. Number[$1]:这是个类似于python的字典的东西,但是它其实是个数列,只是可以这样用而已。
相关文章推荐
- flash初探
- C#关键字:yield
- Xcode7--免证书真机调试
- java 和js中的math.floor()方法
- SDN南向接口和北向接口区别
- 多服务器管理工具fablinker
- AIDL
- 前端【网站集锦】
- 关于python django-admin.py startproject mysite不工作的问题
- CSS hack
- 【POJ 2482】 Stars in Your Window(线段树+离散化+扫描线)
- how to setup php running environment on osx
- C# 值类型与引用类型 (上)
- Pomelo 新手计划(四)
- Puppet自动化工具工作原理介绍
- 计算机网络——2.网络硬件设备工作原理
- Oracle like '%xxx%'优化笔记。
- Mupad 应用实践
- 简单理解Hibernate三种状态的概念及互相转化
- 继承