awk的读取处理结构数据的案例
2013-04-02 14:25
295 查看
awk 是一种用于读取和处理结构化数据的极佳工具.FS (字段分隔符)变量设置成 ":",可以分析出一个复杂文件的各种我们所要取得的字段;但是对于一个多行记录需要一些其他变量来辅助;比如RS,OFS,ORS等; 如果要分析占据多行的记录,仅仅依靠设置 FS 是不够的。在这些情况下,我们还需要修改 RS 记录分隔符变量。RS 变量告诉awk 当前记录什么时候结束,新记录什么时候开始; 以下案例: [root@Slave02 ~]# cat a.txt jimmy the Weasel 100 pleasant Drive San Francisco, Ca 12345 Big Tony 200 Incognito Ave. Suburbia, WA 67890 [root@Slave02 ~]# 完成处理“联邦证人保护计划”所涉及人员的地址列表的任务; [root@Slave02 ~]# cat address.awk BEGIN { FS="\n" RS="" } { print $1 "," $2 "," $3 } [root@Slave02 ~]# [root@Slave02 ~]# awk -f address.awk a.txt jimmy the Weasel,100 pleasant Drive,San Francisco, Ca 12345 Big Tony,200 Incognito Ave.,Suburbia, WA 67890 [root@Slave02 ~]# 加入OFS变量分割符的; [root@Slave02 ~]# vi address.awk BEGIN { FS="\n" RS="" OFS=", " } { print $1 "," $2 "," $3 } ~ ~ ~ ~ ~ "address.awk" 9L, 73C written [root@Slave02 ~]# awk -f address.awk a.txt jimmy the Weasel,100 pleasant Drive,San Francisco, Ca 12345 Big Tony,200 Incognito Ave.,Suburbia, WA 67890 [root@Slave02 ~]# awk 还有一个特殊变量 ORS ,全称是“输出记录分隔符”。通过设置缺省为换行 ("\n") 的 OFS ,我们可以控制在 print 语句结尾 自动打印的字符。缺省 ORS 值会使 awk 在新行中输出每个新的 print 语句。如果想使输出的间隔翻倍,可以将 ORS 设置成 "\n\n" 。或者,如果想要用单个空格分隔记录(而不换行),将 ORS 设置成 "" 。 [root@Slave02 ~]# vi address.awk BEGIN { FS="\n" RS="" ORS="" } { x=1 while ( x<NF ) { print $x "\t" x++ } print $NF "\n" } ~ ~ ~ ~ ~ ~ "address.awk" 14L, 151C written [root@Slave02 ~]# awk -f address.awk a.txt jimmy the Weasel 100 pleasant Drive San Francisco, Ca 12345 Big Tony 200 Incognito Ave. Suburbia, WA 67890 [root@Slave02 ~]# 首先,将字段分隔符 FS 设置成 "\n" ,将记录分隔符 RS 设置成 "" ,这样 awk 可以象以前一样正确分析多行地址。然后,将输 出记录分隔符 ORS 设置成 "" ,它将使 print 语句在每个调用结尾 不 输出新行。这意味着如果希望任何文本从新的一行开始, 那么需要明确写入 print "\n" 。 在主代码块中,创建了一个变量 x 来存储正在处理的当前字段的编号。起初,它被设置成 1 。然后,我们使用 while 循环(一 种 awk 循环结构,等同于 C 语言中的 while 循环),对于所有记录(最后一个记录除外)重复打印记录和 tab 字符。最后, 打印最后一个记录和换行;此外,由于将 ORS 设置成 "" ,print 将不输出换行。程序输出如下,这正是我们所期望的: 我们想要的输出。不算漂亮,但用 tab 定界,以便于导入电子表格。
相关文章推荐
- 串口高性能处理串口数据,按位读取处理案例
- 文章评论类,数据结构与读取方法
- mr任务之从多个Hbase表中读取数据进行处理
- SDUT 3377 数据结构实验之查找五:平方之哈希表(平方探测处理冲突)
- ean13码的生成,python读取csv中数据并处理返回并写入到另一个csv文件中
- MongoDB数据建模小案例:多列数据结构
- 读取大csv文件数据插入到MySql或者Oracle数据库通用处理
- libnids-1.21 中 IP 分片重组分析 之数据结构与处理流程
- 树形结构数据后台处理:一次循环生成树
- [置顶] 【matlab 数据处理】excel读取和写出,匹配
- 结构体内部偏移的妙用 从文件中按照固定格式读取数据
- 数据之间的处理(表,结构,指针啊)定义与相互之间的赋值(针对初学者容易混淆的概念)
- awk处理之案例五:awk匹配字段2包含字段1的文本
- HBase建表高级属性,hbase应用案例看行键设计,HBase和mapreduce结合,从Hbase中读取数据、分析,写入hdfs,从hdfs中读取数据写入Hbase,协处理器和二级索引
- QT下GPS数据读取与处理!!!
- 大数据高效复制的处理案例分析总结
- C语言 文件I/O:实现结构体数据 存储到文件和从文件读取
- 树形结构的处理--数据新增,修改、删除
- JSON复杂数据处理之Json树形结构数据转Java对象并存储到数据库的实现
- 自己标注(不注意坑不少)-Spark+Kafka构建实时分析Dashboard案例——步骤三:Spark Streaming实时处理数据