`
rootsoso
  • 浏览: 69668 次
  • 性别: Icon_minigender_1
  • 来自: 马勒隔壁
社区版块
存档分类
最新评论

awk使用方法

阅读更多

摘自:http://bbs.xplore.cn


AWK是一种模式扫描合处理语言,其名称来自最初的作者Alfred V. Aho,Perter J. Weinberger和Brian W.Kernighan的字母缩写,最早的AWK是在AT&T的Bell实验室发明的。
Linux下面使用的AWK是GNU AWK。
AWK可以用来:
1.管理小型个人数据库
2.产生报表
3.产生索引
。。。。
AWK也是一种解释性的语言,,我们主要使用它来编写一些小的工具,解决某些大问题中的小问题,对于系统管理员而言特别有用。
下面以文件test1.dat来举例说明AWK的一些简单应用:


代码::

cat test1.dat
one 123-321 234/22 a
two 344-637 726/28 c
three 273-287 287/97 d
four 872-872 282/20 c


上面是test1.dat的内容,中间用空白字符隔开(可以是空格,制表符等)
首先我们要弄清楚几个概念:
1.记录(record)
记录是AWK从数据文件上读取的数据的基本单位。对于test1.dat文件而言,一条记录就是一行。
第一条记录:“one 123-321 234/22 a”
2.域(field)
域是为记录上被分隔的子字符串。以记录“one 123-321 234/22 a”为例子
第一栏 第二栏 第三栏 第四栏
one 123-321 234/22 a
一帮以空白字符来分隔相邻的域。

如果AWK的程序很段,那么就可以再命令行上直接输入:
awk '程序' 文件1,文件2.。。。。
比如打印输入文件的第二列

代码::
awk '{print $2}' test1.dat
123-321
344-637
273-287
872-872


如果程序较长,那就写入到一个脚本文件中,执行awk的格式如下:
awk -f 程序文件名 文件1,文件2.。。。
这个和一般的shell脚本不一样,一般的shell脚本自己把它看成可知行文件来执行。
AWK程序的文件不止一个时,执行AWK的格式如下:
awk -f 程序文件1 -f 程序文件2 。。。 文件1,文件2.。。。。。

现在我们来看看AWK程序的主要结构,AWK程序中主要语法是表示式{动作},因此一般的AWK程序形式象下面这样:
表达式1 {动作1}
表达式2 {动作2}
。。。
表示式n {动作n}

AWK也可以接受一般的关系判断如

代码::
>,<,>=,<=,==,!=


另外它还接受~(符合)及!~(不符合)两个关系运算符,比如

代码::
 "Xplore" ~/or/


这个上面这一行是一个表达式,因为Xplore中包含可符合/or/的子字符串,顾该表达式返回true。
而动作是有许多AWK指令构成。AWK的指令合C语言的指令类似。比如:
AWK的I/O指令:print,printf(),getline.....
AWK 流程控制指令:if (..){ ...} else {...} while(....) {....}.....

一个标准的AWK程序分成三个部分:BEGIN{},{},END{},其中BEGIN{}部分是再程序开始时执行,不管是否有输入,{}是输入多少行,就执行多少行;END{}是在程序结束时执行,也只执行一次。
比如下面的程序.

代码::

$cat count.awk
BEGIN{
print "now,begin statistic the lines of file ";
count=1;
}
{
print "this is the " count " line";
count++;
}
END{
print "this is the end of file";
}


$ awk -f count.awk test1.dat
now,begin statistic the lines of file
this is the 1 line
this is the 2 line
this is the 3 line
this is the 4 line
this is the end of file



再说一说有关AWK的内部变量:
1.域变量
AWK内部的域变量及其含义如下:
域变量 含义
$0 为一字符串,其内容为目前AWK所读入的记录
$1 代表$0上第一个域的数据
$2 代表$0上第二个域的数据
......................
AWK还提供了一些其他内部变量,常用的有:
NF(Number of Fields)为一整数,表示域的数目,比如test1.dat上域数目就是4个
NR(Number of Records)为一整数,其值表示AWK意读入的记录条数
FILENAME 正在处理的数据文件名

还有一些AWK的内部函数,这些函数的用法和名称和perl相识,因此这里不详细说明,在后面的例子中大家可以看到。

现举出一些常用的例子,通过这些实例,会对AWK语言有深一步的了解。
1.输出所有输入行之中,字段的最大个数。

代码::
$awk '{if (NF>max) max=NF} END{print max} ' test1.dat
4



2.将一个文件里所有的空白行删除

代码::
$ awk 'NF>0' test1.dat
one 123-321 234/22 a
two 344-637 726/28 c
three 273-287 287/97 d
four 872-872 282/20 c



3.输出一个文件的偶数行

代码::

$ awk 'NR %2 ==0' test1.dat
two 344-637 726/28 c
four 872-872 282/20 c



4.输入范围是1到100的七个随机数

代码::
$ awk 'BEGIN{for (i=1;i<7;i++) print int(101*rand())}'
24
29
85
15
59
19



5.输出本目录下所有文件的字节数

代码::
]$ ls -l |awk '{x+=$5}; END{print x}'
15827



6.将系统上的所有用户名,按照字母顺序输出

代码::
$ awk 'BEGIN{FS=":";} {print $1 |"sort" }' /etc/passwd
adm
apache
bin
daemon
dbus
desktop
ftp
games
gdm
gopher
guest
halt
lp
mail
mailnull
mlsx
mysql
news
nfsnobody
nobody
nscd
ntp
operator
pcap
plone
root
rpc
rpcuser
rpm
shutdown
smmsp
squid
sshd
sync
uucp
vcsa
webalizer
wpm
xfs



7.统计一个文件的总行数并输出

代码::
$ awk 'END{print "total",NR,"lines"}' test1.dat
total 4 lines



8.给文件添加行数并输出

代码::
1: root:x:0:0:root:/root:/bin/bash
2: bin:x:1:1:bin:/bin:/sbin/nologin
3: daemon:x:2:2:daemon:/sbin:/sbin/nologin
4: adm:x:3:4:adm:/var/adm:/sbin/nologin
5: lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6: sync:x:5:0:sync:/sbin:/bin/sync
7: shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8: halt:x:7:0:halt:/sbin:/sbin/halt
9: mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10: news:x:9:13:news:/etc/news:
11: uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
12: operator:x:11:0:operator:/root:/sbin/nologin
13: games:x:12:100:games:/usr/games:/sbin/nologin
14: gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
15: ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
16: nobody:x:99:99:Nobody:/:/sbin/nologin
17: rpm:x:37:37::/var/lib/rpm:/bin/bash
18: vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
19: nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
20: sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
21: rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
22: rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
23: nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
24: mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
25: smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
26: pcap:x:77:77::/var/arpwatch:/sbin/nologin
27: ntp:x:38:38::/etc/ntp:/sbin/nologin
28: gdm:x:42:42::/var/gdm:/sbin/nologin
29: desktop:x:80:80:desktop:/var/lib/menu/kde:/sbin/nologin
30: mlsx:x:500:48:weiguozhao:/home/mlsx:/bin/bash
31: apache:x:48:0:Apache:/var/www:/sbin/nologin
32: webalizer:x:67:67:Webalizer:/var/www/html/usage:/sbin/nologin
33: guest:x:501:501::/home/guest:/bin/bash
34: wpm:x:502:502::/home/wpm:/bin/bash
35: dbus:x:81:81:System message bus:/:/sbin/nologin
36: plone:x:101:102:Plone User:/var/lib/plone2/main:/bin/false
37: squid:x:23:23::/var/spool/squid:/sbin/nologin
38: xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
39: mysql:x:103:104:MySQL server:/var/lib/mysql:/bin/bash



9.输出文件中包含‘one’的行

代码::
$ awk '/one/{print $0}' test1.dat
one 123-321 234/22 a



10.给该系统上的正规用户的邮箱列表(假设域名是cie.xtu.edu.cn)

代码::
$ awk 'BEGIN{FS=":";} {if ($3>499) print $1 "@cie.xtu.edu.cn"}' /etc/passwd
nfsnobody@cie.xtu.edu.cn
mlsx@cie.xtu.edu.cn
guest@cie.xtu.edu.cn
wpm@cie.xtu.edu.cn



分享到:
评论

相关推荐

    shell命令awk使用方法

    shell命令awk使用方法

    AWK 使用教程

    本文档旨在为初学者提供详细的AWK使用方法,帮助他们快速掌握AWK的用法。 ### 1. 前言 本手册以一系列逐步深入的范例来介绍AWK,涵盖了常见问题的解决方案和解题模式。建议读者具备一定的UNIX基础知识,如文件操作...

    awk使用手册,awk使用手册

    ### Awk 使用手册详解 #### 一、Awk 简介 ...对于经常需要处理大量文本数据的用户来说,掌握 Awk 的使用方法将极大地提高工作效率。随着对 Awk 学习的深入,你会发现它在数据分析领域的无限潜力。

    sed和awk使用实例

    这两条命令都可以用于去除文件中的重复行,awk 的方法使用关联数组来实现,而 sort 命令使用 uniq 命令来实现。 三、其他实例 1. 筛选出 login_version 的值 awk -F: '$1~/login_version/{print $2}' a.txt sed -...

    awk使用手册awk使用手册

    ### awk 使用手册详解 #### 一、awk简介与基本概念 awk 是一款强大的文本处理工具,在 Unix 和类 Unix 操作系统中广泛使用。...掌握 awk 的使用方法对于任何从事数据处理或文本处理工作的人员来说都是十分重要的。

    awk使用基本理论

    ### awk使用基本理论 #### 一、awk简介与版本 - **awk** 是 Linux Shell 三剑客之一,主要用于文本处理。它是一种强大的文本分析工具...掌握 awk 的基本使用方法对于日常的 Linux 系统管理和数据处理都是非常有用的。

    Sed与awk第三版(高清版)

    高清版sed与awk使用方法,带标签的,bz压缩应该不需要解释什么了把

    awk set 使用手册

    本手册将深入探讨`awk set`的使用方法,帮助你更好地理解和运用这一工具。 一、`awk`基础 `awk`的名字来源于它的创始人——Alfred V. Aho、Peter J. Weinberger和Brian W. Kernighan。它的主要功能是扫描一行文本...

    gawk 3.1.6-1 windows中的awk

    可以在windows系统中使用linux中的awk命令。具体使用方法请参照linux版本的awk使用方法。 可以在windows系统中使用linux中的awk命令。具体使用方法请参照linux版本的awk使用方法

    MOXA_AWK3121配置方法

    综上所述,MOXA_AWK3121设备的配置方法涉及到多个方面,每一步都可能直接影响到无线网络的性能和设备的正常运行。无论是IP网络参数的配置、工作模式的选择,还是功率增强和固件更新等,都需要严格按照操作手册进行,...

    awk的详细介绍,awk的使用介绍

    ### awk的详细介绍与使用指南 #### 一、awk简介 **awk** 是一款非常强大的文本处理工具,由 **Aho**、**Peter Weinberg** 和 **Brian ...通过掌握 **awk** 的使用方法,可以极大地提高工作效率和数据处理能力。

    linux中awk的使用方法.html

    linux中awk的使用方法 设计得问题比较简单 ;方便理解;

    awk使用手册详解_有例子

    #### 七、获取awk的方法 - 大多数现代的UNIX系统默认都安装了awk。 - 如果未安装,可以通过匿名FTP从官方服务器下载: - `phi.sinica.edu.tw:/pub/gnu` - `ftp.edu.tw:/UNIX/gnu` - `prep.ai.mit.edu:/pub/gnu` ...

    MOXA_AWK-3121配置方法及要点说明

    MOXA AWK-3121 配置方法及要点说明 MOXA AWK-3121 是一种工业级无线设备,具有 web 功能配置、IP 网络参数设置、工作模式选择、功率增强等特点。本文将详细介绍 MOXA AWK-3121 的配置方法及要点说明。 一、Web ...

    AWK详细文档 使用手册

    这个手册详细介绍了在Unix环境下使用AWK的各种方法,包括基本命令行选项、高级功能以及一些实用技巧。 通过学习这个AWK详细文档和实例,你可以更好地理解和掌握AWK的用法,从而更有效地处理和分析文本数据。记住,...

    Linux主要shell命令、sed、awk使用详解

    Linux 主要shell命令、sed、awk使用详解 Linux 主要shell命令详解 shell 是用户和 Linux 操作系统之间的接口。Linux 中有多种 shell,其中缺省使用的是 Bash。本章讲述了 shell 的工作原理,shell 的种类,shell ...

    调优,AWK使用

    在信息技术领域,调优是一项至关重要的工作,目的是为了提高系统的性能、效率和可靠性。...对于IT专业人员而言,深入理解这些知识点,运用合适的工具和方法,能够有效地提升系统的整体性能,满足不同业务的需求。

    Unix awk 使用手册

    ### Unix awk 使用手册详解 #### 一、awk简介 **awk** 是一款强大的文本处理工具,在 Unix 和类 Unix 操作系统中广泛使用。...对于任何需要处理文本数据的 Unix 用户而言,熟练掌握 awk 的使用方法都是非常有益的。

Global site tag (gtag.js) - Google Analytics