awk 小结

awk

是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

参数:
-F fs               指定行中分隔数据字段分隔符
-f file             指定读取程序的文件名
-v var=value        定义awk程序中的一个变量及其默认值
-mf N               指定要处理的数据文件中的最大字段数
-mr N               指定数据文件中的最大数据行数
-W keyword          指定awk的兼容模式或警告等级

例子:
# cat awk.txt
data11,data12,data13,data14,data15
data21,data22,data23,data24,data25
data31,data32,data33,data34,data35

指定分隔符,打印第一行
# awk -F‘[,]‘ ‘{print $1}‘ awk.txt
data11
data21
data31
取出网卡的IP地址,指定两个分隔符
# ifconfig eth0|awk NR==2|awk -F‘[: ]+‘ ‘{print $4}‘
192.168.1.2
# ifconfig eth0 |awk -F ‘[ :]+‘ ‘NR==2 {print $4}‘
192.168.1.2

使用变量:
1、字段和数据行分隔符变量
$1、$2、$3:分别表示第一行、第二行、第三行
$NF             最后一列
$(NF-1)         倒数第二列
NF              数据文件中的字段总数
NR              已处理的输入数据行数目,行号

FIELDWIDTHS     由空格分隔开的定义了每个数据字段确切宽度的一列数字
FS              输入字段分隔符
RS              输入数据行分隔符
OFS             输出字段分隔符
ORS             输出数据行分隔符

例子:
# cat awk.txt
data11,data12,data13,data14,data15
data21,data22,data23,data24,data25
data31,data32,data33,data34,data35
1.指定分隔符号,打印出前三列
# awk ‘BEGIN{FS=","} {print $1,$2,$3}‘ awk.txt
data11 data12 data13
data21 data22 data23
data31 data32 data33
2.替换指定分隔符,打印前三列
# awk ‘BEGIN{FS=",";OFS="-"} {print $1,$2,$3}‘ awk.txt
data11-data12-data13
data21-data22-data23
data31-data32-data33
3.FIELDWIDTHS变量允许读取数据行,而不用字段分隔符来划分字段。在一些应用程序中,不用字段符,数据是被放置在数据行的某些列中。在这种情况下,你必须设定FIELDWIDTHS变量来匹配数据在数据行中的位置。这里是根据提供的字段宽度大小来计算字段。
# cat awksum.txt
1005.3247596.37
115-2.349194.00
05810.1298100.1

# awk ‘BEGIN{FIELDWIDTHS="3 5 2 5"}{print $1,$2,$3,$4}‘ awksum.txt
100 5.324 75 96.37
115 -2.34 91 94.00
058 10.12 98 100.1
# awk ‘BEGIN{FIELDWIDTHS="3 5 3 9"}{print $1,$2,$3,$4}‘ awksum.txt
100 5.324 759 6.37
115 -2.34 919 4.00
058 10.12 981 00.1
# awk ‘BEGIN{FIELDWIDTHS="4 5 3 9"}{print $1,$2,$3,$4}‘ awksum.txt
1005 .3247 596 .37
115- 2.349 194 .00
0581 0.129 810 0.1

显示/etc/passwd文件中有多少行
# awk ‘{print NR}‘ /etc/passwd

awk使用案例:
统计同一个IP的访问量,以下是文件
# cat access.log
10.0.0.41 - - [03/Dec/2010:23:27:01 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
10.0.0.43 - - [03/Dec/2010:23:27:01 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
10.0.0.42 - - [03/Dec/2010:23:27:01 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
10.0.0.46 - - [03/Dec/2010:23:27:02 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
10.0.0.42 - - [03/Dec/2010:23:27:02 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
10.0.0.47 - - [03/Dec/2010:23:27:02 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
10.0.0.41 - - [03/Dec/2010:23:27:02 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
10.0.0.47 - - [03/Dec/2010:23:27:02 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
10.0.0.41 - - [03/Dec/2010:23:27:03 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
10.0.0.46 - - [03/Dec/2010:23:27:03 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
以下这是效果
# awk ‘{print $1}‘ access.log |sort|uniq -c|sort -nr -k1
      3 10.0.0.41
      2 10.0.0.47
      2 10.0.0.46
      2 10.0.0.42
      1 10.0.0.43

时间: 2024-10-11 15:59:23

awk 小结的相关文章

9月15日awk小结

awk是报告生成器 awk是原作者:aho,Weinberger,Kernighan三个人首字母的缩写 awk是指向gawk的符号链接 awk是独立的编程语言, 模式:类似地址定界 $0表示整个一行 $1$2$3$4,表示每个由空格分开的单位 -F char 是分隔符 awk [选项] 'program' file awk [选项] 'pattern{action}' file 支持变量: 内置变量,自定义变量 内置变量: FS:输入时字段分隔符 Rs:输入时行分隔符 OFS:输出时字段分隔符

awk小结

[[email protected] ~]# chkconfig --list|grep 3:on atd 0:off 1:off 2:on 3:on 4:on 5:on 6:off crond 0:off 1:off 2:off 3:on 4:off 5:off 6:off network 0:off 1:off 2:off 3:on 4:off 5:off 6:off rsyslog 0:off 1:off 2:off 3:on 4:off 5:off 6:off sshd 0:off 1:

awk基础知识小结(1)

1.使用规则 awk 适合于文本处理和报表生成,它还有许多精心设计的特性,允许进行需要特殊技巧程序设计. awk  的语法较为常见.它借鉴了某些语言的一些精华部分,如C 语言.python 和 bash. 第一个 awk 让我们继续,开始使用 awk,以了解其工作原理.在命令行中输入以下命令: $ awk '{ print }'  /etc/passwd 您将会见到 /etc/passwd 文件的内容出现在眼前.现在,解释 awk 做了些什么.调用 awk 时,我们指定  /etc/passwd

awk基础知识小结(2)

10.循环结构循环结构awk 的 while 循环结构,它等同于相应的 C 语言 while 循环.awk 还有 "do...while" 循环,它在代码块结尾处对条件求值,而不象标准 while 循环那样在开始处求值.它类似于其它语言中的 "repeat...until" 循环.示例:do...while 示例 {     count=1     do {    print "I get printed at least once no matter w

sed与awk命令小结

1.sed命令小结 Sed是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑,标准输入可以是来自键盘输入.文件重定向.字符串.变量,甚至来自管道的文本.Sed从文本的一个文本行或标准输入中读取数据,将其复制到缓冲区,然后读取命令行或脚本的第一个命令,对此命令要求的行号进行编辑,重复此过程,直到命令行或脚本中的所有命令都执行完毕.相对于vi等其他文本编辑器,sed可以一次性处理所有的编辑任务,显得非常高效,为用户节省了大量的时间. 1. 语法:sed [OPTION]... {script

awk用法小结(作者总结)

http://www.chinaunix.net/old_jh/24/691456.html http://wenku.baidu.com/view/ebac4fc658f5f61fb736664d.html awk 用法:awk ' pattern {action} ' 变量名 含义 ARGC 命令行变元个数 ARGV 命令行变元数组 FILENAME 当前输入文件名 FNR 当前文件中的记录号 FS 输入域分隔符,默认为一个空格 RS 输入记录分隔符 NF 当前记录里域个数 NR 到目前为止

linux中awk学习小结

awk与sed本身都是一个完整的编程语言,可以用来方便的处理文本.awk正常的结构: cat tmp.txt | awk 'BEGIN{}{}END{}'   --带有表头,带有中间的处理过程,带有结尾--常用用法:cat tmp.txt|awk '{print $1}'  --tmp.txt中字段已空格分隔,$0显示整行,$1表示第一个域,$NF最后一个,$NF-1倒数第二个域,默认的分隔符是空格--  1.域分隔符是:cat /etc/passwd|awk -F':' '{print $1,

awk 用法小结

简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本. awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK

awk命令之小结1

awk.grep.sed是linux操作文本的三大利器,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理. 以下所有实验输出,均以测试文件test.log内容为基准: 20170102 admin,password Open 20170801 nmask,nmask close 20180902 nm4k,test fi