全部博文(93)
分类: LINUX
2009-01-15 23:52:22
Awk 的应用
一、Awk是一个工具,是一种自解释编程语言,从文件或字符串中按照一定规则浏览和抽取信息。
它有三种调用awk方式
1) awk [-F filed-spearator] ‘command’ input-files
2) awk脚本
所有awk命令插入一个文件,并使awk程序执行,然后用awk命令解释器作为脚本的首行,以便通过键入脚本名称来调用它。
3) awk 命令插入一个单独文件
awk –f awk-script-file input-files
awk脚本是由各种操作和模式组成的。
l 模式部分决定动作语句何时触发及触发事件。(BEGIN, END)
l 动作对数据进行处理,放大大括号{}内指明。(print)
l 分割符、域和记录
-awk执行时,其浏览域标记为$1,$2……$n.这种方法称为域标识。$0为所有域,即一整行
-注意执行时不要混淆符号$和shell提示符$,它们是不同的.
它的格式:
awk –F ‘’ filename
awk中的特殊字符:
匹配操作符:~ , !~------指不匹配
不加参数-F,默认分隔符是空格,如有其它的分隔符:-F “[:/]”
&&---------表示要同时满足前后两个条件
||------------表示满足一个条件即可执行,相当于或
!----------表示取反,相当于非
awk 的内部命令:NR(显示每行的行号),NF(统计每行分隔符分命的段数).
二、Awk的实例
1. 打印所有输入行(脚本)
#!/bin/awk –f
BEGIN{
FS= “:” #如果对分隔符没有特殊要求,可省略
}
{
print $0
}
2. 打印输入文件的第八行(脚本)
#!/bin/awk –f
{
If (NR==8)
print $0}
3. 用awk命令打印文件所有行的第一个字段
awk –F: ‘{print $1}’ /etc/passwd (以passwd文件为列)
4. 打印输入行总数
awk –F: ‘END{print NR}’
5. 打印每行字段数
awk –F: ‘{print NF}’ /etc/passwd
6. 打印最后一行的最后一个字段的值
#!/bin/awk -f
BEGIN{
FS= “:”
}’
END{
print NF
}
7. 打印字段数大于4个的行
Awk –F: ‘NF>
8. 打印文件所有字段的总数
#!/bin/awk
BEGIN{
FS = “:”
num=0
}
{
num=num+NF
}
END{
print num
}
9. 打印uid在30-40范围内的用户名
awk –F: ‘$3>
10. 倒序排列文件的所有字段
#!/bin/awk –f
BEGIN{
FS= “:”
}
{
for (i=NF; i>0; i--)
{
print (“%s\t”,$i)
}
printf (“\n”)
}
11. 打印5到26行
Awk –F: ‘NR>5 && NR<26 {print $0}’ /etc/inittab
12. 在文件顶部加上标题“document”
13. 隔行删除
14. 打印字段数大于5个的行总数
15. 每行抽取第一个单词(脚本)
16. 打印每行的第一个和第三个单词(脚本)