分类: LINUX
2010-07-26 16:43:52
gawk是GNU所做的Unix下的awk项目。gawk是一种流编辑器,他可以提供一种编程语言,而不仅仅是编辑的命令。用这些语言你可以:
1, 定义变量来存储数据;
2, 用带有算术或字符串的数据来操作;
3, 使用结构化的程序设计。像if-then、循环,来补充你数据处理的逻辑;
4, 通过提取数据文件的数据元素来生成格式化的报告;
gawk的命令格式
命令行选项提供了一个简单的方法定义(制)特征。我们可以直观的看到我们利用gawk的输出(explore)
gawk的亮点是脚本,你可以写一个脚本读取文件按一行内的数据,然后处理、显示数据,产生任何形式的报告。
下边是gawk的一些可用选项
-F fs 定义字段之间的分隔符
-f file 指定从中读取程序的文件
-v var=value 定义一个变量,当作gawk程序的默认值
-mf N 每个字段的最大位数
-mr N 定义处理数据的最大空间
-W keyword 为gawk指定兼容模式或警告级别
定义数据字段变量
$0 代表文本的一整行内容
$1 代表数据的第一个字段
$2 代表数据的第二个字段
$n 代表数据的第n个字段
gawk默认的分隔符是任何的空白字符
[root@localhost test1]# cat test1
one line of test text.
two lines of test text.
three lines of test text.
[root@localhost test1]# gawk '{print $1}' test1
one
two
three
[root@localhost test1]#
我们可以用-F指定分隔符
[root@localhost test1]# gawk -F: '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
指定变量的默认值
[root@localhost test1]# echo "my name is rich"|gawk '{ print $0}'
my name is rich
[root@localhost test1]# echo "my name is rich"|gawk '{ $4="Dave"; print $0}'
my name is Dave
[root@localhost test1]#
或者
[root@localhost test1]# gawk '{
> $4="dave"
> print $0 }'
my name is rich .
my name is dave .
从文件中读取程序
[root@localhost test1]# cat test2
{print $5 "'s userid is " $1}
[root@localhost test1]# gawk -F: -f test2 /etc/passwd
bin's userid is bin
daemon's userid is daemon
adm's userid is adm
lp's userid is lp
sync's userid is sync
shutdown's userid is shutdown
或者
[root@localhost test1]# cat test3
{
text="'s userid is "
print $5 text $1
}
[root@localhost test1]# gawk -F: -f test3 /etc/passwd|more
yhf123's userid is root
bin's userid is bin
daemon's userid is daemon
adm's userid is adm
lp's userid is lp
sync's userid is sync
shutdown's userid is shutdown
halt's userid is halt
mail's userid is mail
news's userid is news
uucp's userid is uucp
用begin和end标记开始与结束
[root@localhost test1]# cat test4
BEGIN {
print "The latest list of users and shells"
print "userid shell"
print "-------- -------"
FS=":"
}
{
print $1 " " $7
}
END {
print "this concludes the listing "
}
[root@localhost test1]# gawk -f test4 /etc/passwd
The latest list of users and shells
userid shell
-------- -------
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
news
uucp /sbin/nologin
operator /sbin/nologin