Chinaunix首页 | 论坛 | 博客
  • 博客访问: 160148
  • 博文数量: 35
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 294
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-11 14:55
个人简介

努力奋斗的骚年!

文章分类

全部博文(35)

文章存档

2014年(19)

2013年(16)

分类: LINUX

2013-09-06 22:24:23

1.awk:样式扫描和处理语言
2.awk比sed和grep都优秀:sed倾向于对一整行的处理。awk支持对记录和字段的处理,而sed和g rep不能对字段进行处理。awk将一行视为一个记录,将一行中的某一部分作为记录的一个字段,用$1,$2,$3...表示行中的不同字段,用$0表示整个行。
3.分隔符变量FS,目前所处理的行数NR,每一行拥有的字段总数NF,输入记录分隔符RS,输出记录分隔符ORS
    例一:显示文本文件myfile中第七行到第十五行中以字符%分隔的第一字段,第三字段和第七字段: 
                                awk -F % 'NR==7,NR==15 {printf $1 $3 $7}' 
4.awk有很多内置函数,比如printf(),length()。
    例二:$awk 'length($0)>80 {print NR}' myfile 
该命令行将显示文本myfile中所有超过80个字符的行号,在这里,用$0表示整个记录(行),同时,内置变量NR不使用标志符'$'。 
5.awk的变量:awk变量包括自定义变量和内置变量,awk引用变量不需要$符号(如NR),所有变量都可以直接使用。不需要初始化。
6.作为样式匹配,awk提供了~匹配于,!~不匹配于
    例三:文件a,统计文件a的第一列中是浮点数的行的浮点数的平均值
$cat a
1.021 33
1#.ll   44
2.53 6
ss    7

awk 'BEGIN{total = 0;len = 0} {if($1~/^[0-9]+\.[0-9]*/){total += $1; len++}} END{print total/len}' a
根据我的猜测,~匹配/ /中的内容。
7.awk提供了BEGIN和END两个特殊表达式,BEGIN之后的操作 {}将在awk扫描输入之前执行,END之后的操作将在扫描之后执行。
8.函数function。
9.高级输入输出:
    (1)next   读取下一条记录。    
    (2)getline  读取一条记录。
    (3)close("filename")关闭文件
10.awk中print和printf的区别:
       print输出指定内容后换行,printf输出指定内容后不换行。
11.awk使用shell的变量:用-v选项将shell的变量定义成为awk变量。
$var="this is a test"
awk -v nvar="$var" '{print nvar}'
例四:用awk合并行:
  1. linecount=3
  2. awk -v n=${linecount} '{if (NR%n==0){print $0} else {printf"%s ",$0}}' filename
  3. 111111111 222222222 333333333
  4. 444444444 555555555 666666666
  5. 777777777 888888888 999999999

或: awk '{if(NR%4!=0){ORS=" "} else {ORS="\n"} print}' filename
或:awk '{if(NR%4!=0)ORS=" ";else ORS="\n";print}' filename

由上可看出,{}和;的使用可以替换
                    ORS是输出记录分隔符。
例五:omiga@omiga:~/workplace/shell$ cat testawk4
gaga
sunhehe
gag
gag
gag
gag
moonhehe
gag
gag

显示出匹配sun和moon之间的行:
awk '/[Ss]un/,/[Mm]oon/ {print}' testawk4
sunhehe
gag
gag
gag
gag
moonhehe

显示出匹配sun和moon的行:(注意中间没有逗号)
awk '/[Ss]un/ {print} /[Mm]oon/ {print}' testawk4
sunhehe
moonhehe

12.awk的模式:awk ‘条件类型1{动作1}  条件类型2{动作2}   条件类型3{动作3} 。。。。。’     filename
    重要:awk 中什么时候用,什么时候用;什么时候用空格就行
              条件类型里面/  /   表示匹配,/   /   和/   /  之间用的是“,”
              动作里面区分几个动作用的是“;”
              条件类型{动作} 之间用的是空格
























12.





         

























阅读(1648) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~