awk的split函数
来源:互联网 发布:mysql 32位下载安装包 编辑:程序博客网 时间:2024/06/11 22:46
awk 每次从数据文件中只读取一数据进行处理.
awk是依照其内建变量 RS(Record Separator) 的定义将文件中的数据分隔成一行一行的Record. RS 的默认值是 "\n"(跳行符号), 故平常awk中一行数据就是一笔 Record. 但有些文件中一笔Record涵盖了多行数据, 这种情况下不能再以 "\n" 来分隔Records. 最常使用的方法是相邻的Records之间改以 一个空白行 来隔开. 在awk程序中, 令 RS = ""(空字符串)后, awk把会空白行当成来文件中Record的分隔符. 显然awk对 RS = "" 另有解释方式,简略描述如下, 当 RS = "" 时:数个并邻的空白行, awk仅视成一个单一的Record Saparator. (awk不会于两个紧并的空白行之间读取一笔空的Record)
awk会略过(skip)文件头或文件尾的空白行. 故不会因为这样的空白行,造成awk多读入了二笔空的数据.
请观察下例,首先建立一个数据文件 week.rpt如下:
张长弓GNUPLOT 入门吴国强Latex 简介VAST-2 使用手册mathematic 入门李小华awk Tutorial GuideRegular Expression
该文件的开头有数行空白行, 各笔Record之间使用一个或数个空白行隔开. 细心观察以下, 当 RS = "" 时, awk读取该数据文件之方式.
编辑一个awk程序文件 make_report.sh 如下:
#!/bin/bashawk 'BEGIN {FS="\n"RS=""split("一. 二. 三. 四. 五. 六. 七. 八. 九.",C_Nnumber," ")}{printf ("\n%s 报告人: %s\n", C_Number[NR],$1)for (i = 2; i <= NF; i++)printf(" %d. %s\n", i-1, $i)}' $*
执行:
shell>./make_report.sh week.rpt
结果如下:
一. 报告人: 张长弓 1. GNUPLOT 入门 二. 报告人: 吴国强 1. Latex 简介 2. VAST-2 使用手册 3. mathematic 入门 三. 报告人: 李小华 1. awk Tutorial Guide 2. Regular Expression
[说明]
本程序同时也改变字段分隔字符( FS= "\n" ), 如此一笔数据中的每一行都是一个field. 例如: awk读入的第一笔 Record 为
张长弓GNUPLOT 入门
其中 $1 指的是"张长弓", $2 指的是"GNUPLOT 入门"
上式中的C_Number[ ]是一个数组(array), 用以记录中文数字. 例如: C_Number[1] = "一.", C_Number[2] = "二." 这过程使用awk字符串函数 split( ) 来把中文数字放进数组 C_Number[ ]中.
函数 split( )用法如下:
split( 原字符串, 数组名称, 分隔字符(field separator) )
awk将依所指定的分隔字符(field separator)分隔原字符串成一个个的字段(field), 并以指定的 数组 记录各个被分隔的字段
再例如 :
ArgLst = "5P12p89"split( ArgLst, Arr, /[Pp]/)
执行后 : Arr[1]=5, Arr[2]=12, Arr[3]=89
参考:
awk手册 (摘自这儿.)
- awk的split函数
- #AWK#split函数
- awk的split
- awk之split函数使用
- linux下awk内置函数的使用(split/substr/length)
- linux下awk内置函数的使用(split/substr/length)
- Linux里awk中split函数的用法小结
- linux下awk内置函数的使用(split/substr/length)
- split函数的用法(Linux里AWK中split函数的用法)
- linux AWK 内置函数split,substr用法
- awk内置函数(split/substr/length/gsub)
- 【转】linux下awk内置函数的使用(split/substr/length)
- awk数组和split函数、asort和asorti 排序函数
- linux下awk内置函数(split/substr/length/gsub)
- Split函数的用法
- Delphi的Split函数
- Asp的 SPLIT函数
- C++的split函数
- JAVA JDBC链接查询oracle 数据库的小例程
- The Trip
- 修改Android 4.2.2的原生Camera引出的java.lang.UnsatisfiedLinkError: Native method not found,及解决方法
- C++ 内存分配 vs java内存分配
- c语言指针详解
- awk的split函数
- 如何让程序自动运行
- [C++ Primer] 重载操作符与转换
- Java socket 多线程网络传输多个文件
- 好文章要分享
- HDU 4710 Balls Rearrangement(数论)
- MyEclipse从数据库反向生成实体类之Hibernate方式 反向工程
- 周期串
- 一个女孩写的经典程序!!! (anen)