awk 数组用法【精华贴】
来源:互联网 发布:网络销售公司有些什么 编辑:程序博客网 时间:2024/05/21 11:25
文本处理的工作中,awk的数组是必不可少的工具,在这里,同样以总结经验和教训的方式和大家分享下我的一些学习心得,如有错误的地方,请大家指正和补充。
awk的数组,一种关联数组(Associative Arrays),下标可以是数字和字符串。因无需对数组名和元素提前声明,也无需指定元素个数 ,所以awk的数组使用非常灵活。
首先介绍下几个awk数组相关的知识点:
<1>建立数组<2>读取数组值<3>多维数组,array[index1,index2,……]:SUBSEP是数组下标分割符,默认为“\034”。可以事先设定SUBSEP,也可以直接在SUBSEP的位置输入你要用的分隔符,如:但,有些特殊情况需要避免,如:<4>删除数组或数组元素: 使用delete 函数<5> 排序:awk中的asort函数可以实现对数组的值进行排序,不过排序之后的数组下标改为从1到数组的长度。在gawk 3.1.2以后的版本还提供了一个asorti函数,这个函数不是依据关联数组的值,而是依据关联数组的下标排序,即asorti(array)以后,仍会用数字(1到数组长度)来作为下标,但是array的数组值变为排序后的原来的下标,除非你指定另一个参数如:asorti(a,b)。(非常感谢lionfun对asorti的指正和补充)
下面说awk数组的实际应用。
1. 除去重复项, 这个不多说, 只给出代码:另一种:http://bbs.chinaunix.net/thread-1859344-1-1.html
2. 计算总数(sum),如:3. 查看文件差异。<1> 合并file1和file2,除去重复项:<2> 提取文件1中有,但文件2中没有:另:http://bbs.chinaunix.net/viewthr ... &page=1#pid15547885
4. 排序:5. 有序输出:采用(index in array)的方式打印数组值的顺序是随机的,如果要按原序输出,则可以使用下面的方法:http://bbs2.chinaunix.net/viewthread.php?tid=18112796. 多个文本编辑:这里主要指的是待处理的文本之间的格式上有区别,如分隔符不同,;或是待处理文本需提取的信息的位置不同,如不同的列或行。
<例1>:要求输出:实现代码如下:这里是利用awk的内置变量ARGIND来处理完成对文件的处理。关于ARGIND,ARGV,ARGC的使用,大家可以参考:http://bbs.chinaunix.net/viewthr ... 0335&from=favorites。
当然,我们也可以利用另外一个内置变量FILENAME来完成相同的任务(大家可以先想想怎么写),如下:<例2>:对上面的数据的格式稍作改动,每个文件的分隔符都一样的情况,但输出要求不变:实现代码如下:因为这个例子的数据比较简单,我们也可以在BEGIN模块中完成对FS值设置,如下:利用FILENAME 同样可以解决问题:推荐一个关于数组处理文件的帖子http://www.chinaunix.net/jh/24/577044.html ,里面有不少例子供大家学习。
7. 文本翻转或移位:二维或多维数组的应用
<例1>:<例2>:来自http://bbs.chinaunix.net/viewthr ... &page=1#pid13339226
有两个文本a和b,要求输出c文本,合并的规则是按照第一行的headline(按字母顺序)合并文本a和b,空缺按“0”补齐。下面我们来参看并解读下Tim大师的代码:8. 选择性打印:
打印某个关键字前几行,以3行为例:利用NR取余数,建立数组,这是一种非常高效的代码。
9. 通过split函数建立数组:数组的下标为从1开始的数字。10. awk数组使用的小技巧和需要避免的用法:
<1> 嵌套数组:<2> 下标设为变量或函数:<3> 不可以将数组名作为变量使用,否则会报错:<4> 数组的长度:<5> match 函数也可以建立数组(你知道么?,版本要求高于gawk 3.1.2)<6>想到过用split清空数组么?
awk的数组,一种关联数组(Associative Arrays),下标可以是数字和字符串。因无需对数组名和元素提前声明,也无需指定元素个数 ,所以awk的数组使用非常灵活。
首先介绍下几个awk数组相关的知识点:
<1>建立数组<2>读取数组值<3>多维数组,array[index1,index2,……]:SUBSEP是数组下标分割符,默认为“\034”。可以事先设定SUBSEP,也可以直接在SUBSEP的位置输入你要用的分隔符,如:但,有些特殊情况需要避免,如:<4>删除数组或数组元素: 使用delete 函数<5> 排序:awk中的asort函数可以实现对数组的值进行排序,不过排序之后的数组下标改为从1到数组的长度。在gawk 3.1.2以后的版本还提供了一个asorti函数,这个函数不是依据关联数组的值,而是依据关联数组的下标排序,即asorti(array)以后,仍会用数字(1到数组长度)来作为下标,但是array的数组值变为排序后的原来的下标,除非你指定另一个参数如:asorti(a,b)。(非常感谢lionfun对asorti的指正和补充)
下面说awk数组的实际应用。
1. 除去重复项, 这个不多说, 只给出代码:另一种:http://bbs.chinaunix.net/thread-1859344-1-1.html
2. 计算总数(sum),如:3. 查看文件差异。<1> 合并file1和file2,除去重复项:<2> 提取文件1中有,但文件2中没有:另:http://bbs.chinaunix.net/viewthr ... &page=1#pid15547885
4. 排序:5. 有序输出:采用(index in array)的方式打印数组值的顺序是随机的,如果要按原序输出,则可以使用下面的方法:http://bbs2.chinaunix.net/viewthread.php?tid=18112796. 多个文本编辑:这里主要指的是待处理的文本之间的格式上有区别,如分隔符不同,;或是待处理文本需提取的信息的位置不同,如不同的列或行。
<例1>:要求输出:实现代码如下:这里是利用awk的内置变量ARGIND来处理完成对文件的处理。关于ARGIND,ARGV,ARGC的使用,大家可以参考:http://bbs.chinaunix.net/viewthr ... 0335&from=favorites。
当然,我们也可以利用另外一个内置变量FILENAME来完成相同的任务(大家可以先想想怎么写),如下:<例2>:对上面的数据的格式稍作改动,每个文件的分隔符都一样的情况,但输出要求不变:实现代码如下:因为这个例子的数据比较简单,我们也可以在BEGIN模块中完成对FS值设置,如下:利用FILENAME 同样可以解决问题:推荐一个关于数组处理文件的帖子http://www.chinaunix.net/jh/24/577044.html ,里面有不少例子供大家学习。
7. 文本翻转或移位:二维或多维数组的应用
<例1>:<例2>:来自http://bbs.chinaunix.net/viewthr ... &page=1#pid13339226
有两个文本a和b,要求输出c文本,合并的规则是按照第一行的headline(按字母顺序)合并文本a和b,空缺按“0”补齐。下面我们来参看并解读下Tim大师的代码:8. 选择性打印:
打印某个关键字前几行,以3行为例:利用NR取余数,建立数组,这是一种非常高效的代码。
9. 通过split函数建立数组:数组的下标为从1开始的数字。10. awk数组使用的小技巧和需要避免的用法:
<1> 嵌套数组:<2> 下标设为变量或函数:<3> 不可以将数组名作为变量使用,否则会报错:<4> 数组的长度:<5> match 函数也可以建立数组(你知道么?,版本要求高于gawk 3.1.2)<6>想到过用split清空数组么?
- awk 数组用法【精华贴】
- 精华贴
- AWK二维数组的用法总结
- awk数组
- awk 数组
- awk数组
- awk 数组
- awk 数组
- awk 数组
- awk 数组
- awk用法
- awk用法
- awk 用法
- AWK 用法
- awk 用法
- awk 用法
- awk用法
- awk用法
- 电子商务数据运营的五大应用
- nginx sendfile tcp_nopush tcp_nodelay参数解释
- 二维数组合并 关键字
- CFileDialog用法
- 屏蔽UITextView上的选择,复制粘贴
- awk 数组用法【精华贴】
- 查找当前目录下的及其子目录中指定的文件
- MySql自动类型转换 MySql insert into select 带来的问题
- Tornado 之 IOLoop类分析
- 关于刷新表的某一行,某个区,整个表的方法
- error while loading shared libraries的解決方法
- 算法整理
- 检测应用的版本更新
- 如何用ruby获取本机IP