awk快速学习
来源:互联网 发布:顶尖数据恢复 编辑:程序博客网 时间:2024/05/04 10:50
一直久仰awk的大名,但一直没有学习,果然是要用的时候学习起来会比较快。答应了帮人写个小程序,就快速学习了下。
首先不知道如何入手,我先看看语法吧。 看电子书:《I love awk》熟悉下语法 。awk最牛逼的就是处理数据,如果能像数据库一样select group啊什么的,就好了,于是我参考了这篇文章: http://blog.csdn.net/sunny5211/article/details/8507020
再说我遇到的一个个问题,我如何解决的。
1、如何使用文件来写脚本,因为在命令行里要敲一大坨不方便调试。所以有这个想法。
awk -f xxx.awk a
// a文件是要分析的文件,xxx.awk就是awk的具体脚本。
2、如何设置分隔符,万恶的分隔符!!!
如果在命令行里就写 awk -F“ ” 这里表示以空格为分隔符
如果 是“\t”分隔符就写 awk -F"\t"
ps:注意空格分隔符和制表符\t是两种不同的分隔,一定要注意!!!姐可是被这玩意儿害惨了的!
如果在xxx.awk分析文件里就写BEGIN{FS="\t"}
3、一种牛b的判断重复行的写法 比如数据格式如下:
第一列是id 第二列是name 第三列是选课
1 jerry aa1 jerry bb 2 kimi aa 2 kimi cc 3 jimmy bb
比如我要统计有几个人
{if(!a[$1]++){x++;}} 这个非的表示用的十分巧妙!
比如我要统计每个人选了几门课
{b[$1]++;}
4、如何定义函数
和c一样 直接定义 function a(){ ...... return xx; }
5、如何在代码里使用正则?
if(x ~/^[1,3]0[0-9][0-9][0-9]/){......} ~符号表示匹配 x为一个变量 ^[1,3]表示以开头
6、内置函数的使用 split() 我这么用了一下:
string="1|2|3|4|5"; split(string,array,/\|/); for(i=1;i<=5;i++) { if(x==array[i]) {return "1";} }
7、遍历数组可以,注意数组从1的下标开始的。和c有点不一样。
for(i in a){print a[i];}for(i=1;i<=length(a);i++){print a[i];}
8、如何同时处理两个文件 比如a文件 和b文件
a文件
1 a 102 b 203 c 30b文件
1 xxx2 yyy3 zzz
想拼接成c文件该如何拼
1 a 10 xxx2 b 20 yyy3 c 30 zzz
一句话 就可以搞定,NR==FNR表示在处理b文件,后面的{}表示处理b文件执行的动作;NR>FNR表示在处理a文件后面的{}表示处理a文件执行的动作。
awk '{NR==FNR{a[$1]=$2;}NR>FNR{print{ $0,a[$1]}}}' b a
9、打印文件倒数第三列的和
- awk快速学习
- Awk学习
- awk学习
- awk学习
- awk学习
- AWK学习
- awk 学习
- awk 学习
- awk学习
- awk学习
- AWK学习
- awk学习
- awk学习
- Awk学习
- awk学习
- awk 学习
- awk学习
- 学习awk
- 使用jQuery和CSS将背景图片拉伸
- UML时序图
- 使用Qt库时出现winsock2.h和windos.h包含顺序错误
- syslog for windows
- 服务器性能测试工具简介
- awk快速学习
- 封装linux系统成iso文件
- JPA教程
- android开机自启动与自动重启
- Adaline:Least-Mean-Square (LMS)
- 【ARM学习笔记】实验三:S3C2440A与内存SDRAM连接实验
- zookeeper与sqoop
- Opensource IDM对比
- javascript 性能分析:编程