awk使用 第7部分 awk对多行数据的处理实例
来源:互联网 发布:c语言运算符结合方向 编辑:程序博客网 时间:2024/04/19 22:19
awk 每次从数据文件中只读取一行数据进行处理,这是因为awk中有一个内建变量RS(Record Separator) ,RS将文件中的数据分隔成以行为单位的记录record。RS默认值以”/n”(跳行符号)分隔数据文件中的信息,所以默认情况下awk 中一行数据就是一行Record。但有些文件中一行Record涵盖了多行数据,这种情况下不能再以”/n” 来分隔Records。最常使用的方法是相邻的Records之间改用一个空白行来分隔。在awk程序中,令RS= “”(空字符串)后,awk把会空白行当成来文件中Record的分隔符。显然awk对RS=”"另有深意,简单来说是这样的,当RS=”" 时:多个相邻的空白行,awk仅作为一个Record Saparator(awk不会在多个相邻的空白行之中选取一行做为空的Record) ;awk会略过(skip)文件头和文件尾的空白行,所以不会因为有这样的空白行,造成awk多读了二行空的数据。下面举个例子看一下,首先建立一个数据文件myfreelinux.dat,内容如下:
[root@myfreelinux pub]# cat myfreelinux.dat
wanger
linux_basic
lisan
linux_server
windows_server
zhaosi
awk_tools
grub
regular_expression
该文件的开头有3行空白行, 各行Record之间分别用2个和1个空白行隔开。那么下面,通过几个例子来看一下。首先编辑一个awk程序脚本report1.awk,内容如下:[root@myfreelinux pub]# cat report1.awk
#!/bin/sh
awk ‘BEGIN{
FS=”/n”;
RS=”";
split(“one:.two:.three:.four:.five:.six:.seven:.eight:.nine:.ten:.”,number,”.”);
}
{
printf(“/n%s reporter is : %s/n”,number[NR],$1);
for(i=2;i<=NF;i++)
printf(“%d %s/n”,i-1,$i);
}’ $*
执行该程序脚本和产生的结果如下:
[root@myfreelinux pub]# bash report1.awk myfreelinux.dat
one: reporter is : wanger
1 linux_basic
two: reporter is : lisan
1 linux_server
2 windows_server
three: reporter is : zhaosi
1 awk_tools
2 grub
3 regular_expression
解释说明:上面这个程序的字段分隔字符是( FS= “/n” ),这样的话一行数据就是一个field,而且RS=“”,所以这三个用户的记录是通过空行来分隔的。那么awk读入的第一行Record 为
wanger
linux_basic
其中$1的值是”wanger”,$2的值是:“ linux_basic”,程序中的number[ ]是一个数组(array),用来记录英文数字,比如number[1]=one:,number[2]=two:等等,这个是使用awk的字符串函 数split()来把英文数字放进数组number[ ]中的。
函数split( )用法如下:
split( 原字符串,数组名,分隔字符(field separator) )
awk将根据指定的分隔字符(field separator)分隔原字符串成一个个的字段(field), 并将各字段记录到数组中。
- awk使用 第7部分 awk对多行数据的处理实例
- awk 处理多行数据
- awk的使用 第六部分 awk编程的几个实例
- Awk 实例,第 1 部分
- Awk 实例,第 1 部分
- Awk 实例,第 2 部分
- Awk 实例,第 3 部分
- Awk 实例,第 1 部分
- Awk 实例,第 2 部分
- Awk 实例,第 3 部分
- Awk 实例,第 1 部分
- Awk 实例,第 2 部分
- Awk 实例,第 3 部分
- Awk 实例,第 1 部分
- Awk 实例,第 2 部分
- Awk 实例,第 3 部分
- awk的使用实例
- 通用线程:Awk 实例,第 1部分
- JSP 和 Servlet 中的绝对路径和相对路径问题
- 优先级反转和解决方法
- Android 轻松实现语音识别
- 记录一下JAVASCRIPT中多线程相关的几篇文章
- linux守护进程模型 之 代理功能
- awk使用 第7部分 awk对多行数据的处理实例
- 在C++中一个类对象究竟占用多少内存
- 谷歌三大核心技术(二)Google MapReduce中文版
- 在Android C/C++层添加LOG调试输出调试
- HDU 4395 D-mail(DP)
- Spring Batch之复合格式文件的读写
- java 实现SSL双向认证
- Android开发 WebView新窗口中打开链接
- C++学习 构造函数与复制构造函数