PS:刚开始实习,就给了个处理百万级别数据的任务,之前学过SHELL的一些东西sed/awk之类的处理,可是也没有具体的应用,只是在10几行10几列的小数据操做过,因此要重新学习下,并应用在实际工做中。你能够用excel编辑还好,保存就卡死你!数组
awk是什么?与其它大多数UNIX命令不一样的是,从名字上看,咱们不可能知道awk的功能,由于awk是三我的名的缩写,他们是:Aho、(Peter)Weinberg和(Brain)Kernighan。正是这三我的创造了awk---一个优秀的样式扫描与处理工具。函数
awk语言最基本的功能是在文件或字符串中基于指定的规则浏览和抽取信息。工具
1.保存awk输出学习
从myfile文件保存到nwefile文件中,这里的$0表示全部内容测试
awk '{print $0}' myfile>newfile
2.使用tee,在输出到文件的同时输出到屏幕(利用管道'|')spa
awk '{print $0}' myfile |tee newfile
3.awk 通常的语法形式命令行
awk [-Field-separator] 'commands' input-file(s) awk -f awk-script-file input-file
4.awk脚本的通常形式设计
#awk-script-file.awk BEGIN {FS=","} { print $1 } END {print "FINISH"}
其中,FS与命令行的-F是一样的,用来设定分隔符,在处理SCV文件时候须要把“,”做为分隔符excel
awk之因此成为一种优秀的程序设计语言的缘由之一是它吸取了某些优秀的程序设计语言语言的许多优势。这些优势之一就是内置函数的使用,awk定义并支持了一系列的内置函数,因为这些函数的使用,使得awk提供的功能更为完善和强大。code
内置字符串函数:
gsub(r,s) 在整个$0中用s替代r awk 'gsub(/name/,"xingming") {print $0}' temp gsub(r,s,t) 在整个t中用s替代r index(s,t) 返回s中字符串t的第一位置,失败返回0 awk 'BEGIN {print index("Sunny","ny")}' temp 返回4 length(s) 返回s的长度 match(s,r) 测试s是否包含匹配r的字符串,失败返回0 也可使用~/xxx/ awk '$1=="J.Lulu" {print match($1,"u")}' temp 返回4 split(s,a,fs) 在fs上将s分红序列a awk 'BEGIN {print split("12#345#6789",myarray,"#")"' 返回3,同时myarray[1]="12", myarray[2]="345", myarray[3]="6789" sprint(fmt,exp) 返回经fmt格式化后的exp sub(r,s) 从$0中最左边最长的子串中用s代替r(只更换第一遇到的匹配字符串) substr(s,p) 返回字符串s中从p开始的后缀部分 substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分
2.awk中自定义语句
1.支持if判断
if(表达式) {语句1} else if(表达式) {语句2} else {语句3}
2.支持for循环
for(变量 in 数组) {语句}
for(变量;条件;表达式) {语句}
3.支持while循环
while(表达式) {语句}
do {语句}while(条件)