AWM命令用法(转载)

1.awk命令简介:
awk是一种可以处理数据、产生格式化报表的语言,功能十分强大。
awk的工作方式是读取数据,将每一行数据视为一条记录(record)每笔记录以字段分隔符分成若干字段,然后输出各个字段的值.

2.awk常用的作用格式:
awk “样式” 文件: 把符合样式的数据行显示出来。
awk { 操作 } 文件: 对每一行都执行{}中的操作。
awk " 样式 { 操作 }" 文件: 对符合样式的数据行,执行{}中的操作.

3.用例:
awk的用法1:

1

awk `/La/` dataf3       #显示含La的行。

awk的用法2:

1

awk -F ":" '{print $1,$2}' /etc/passwd  #以“:”为分割,显示/etc/passwd每一行的第1和第2个字段。$1代表第1个字段,$2代表第2个字段,其他类推.

awk的用法3:

1

awk '/La/{ print $1,$2 }' dataf3  #将含有La关键字的数据行的第1及第2个字段显示出来.默认使用空格分割.

awk的用法4:

1

awk -F : '/^www/{print $3,$4}' /etc/passwd  # 使用选项 -F,指定:为分隔符,账号www的uid(第3个字段)及gid(第4个字段)显示出来.

awk的用法5:

1

2

3

4

[root@localhost~]# awk -F : '/^r/{print $1}' /etc/passwd        #显示以r开头的行的第一个字段

root

rpc

rpcuser

awk的用法6:

1

2

3

4

5

[root@localhost~]# awk -F : '$3>=500{print $1,$3}' /etc/passwd   #找出$3这个字段的id大于等于500的行,并显示1、3列

www 500

cacti 501

nagios 502

vsftpd 503

awk的用法7:

1

2

3

4

5

6

[root@localhost~]# awk -F : '$7~"bash"{print $1,$7}' /etc/passwd        #匹配出$7是bash的行,如果为真则打印出来

root /bin/bash

mysql /bin/bash

www /bin/bash

cacti /bin/bash

nagios /bin/bash

awk的用法8:

1

2

3

4

5

6

7

[root@localhost~]# awk -F : '$7!~"bash"{print $1,$7}' /etc/passwd       #取出$7不是bash的行并打印出来

bin /sbin/nologin

daemon /sbin/nologin

adm /sbin/nologin

lp /sbin/nologin

sync /bin/sync

shutdown /sbin/shutdown

awk扩展:

实例操作:
[root@localhost]# more awk.txt

1

2

07.46.199.184 [28/Sep/2010:04:08:20] "GET /robots.txt HTTP/1.1" 200 0 "msnbot"123.125.71.19 [28/Sep/2010:04:20:11] "GET /

HTTP/1.1" 304 - "Baiduspider

NF的用法:

1. $NF 来打印最后一个字段:

1

2

3

[root@localhost]# awk '{print $NF}' awk.txt    

/

"Baiduspider

2. $(NF-2):表示从右向左打印每行第二个字段.  

1

2

3

[root@localhost]# awk '{print $(NF-2)}' awk.txt

[28/Sep/2010:04:20:11]

304

BEGIN{}区域指示用法:

1.OFS的作用是存储输出字段的分隔符

1

2

3

4

5

[root@localhost~]# awk -F : 'BEGIN{OFS="+++"}/^www/{ print $1 , $2 , $3 , $4 ,$5 }' /etc/passwd     

www+++x+++500+++500+++

 

# 以 ":" 为分隔符,+++为输出字段分隔符,将账号www用户的第1-5栏显示出来.

本例中,BEGIN{}区域指示awk一开始先做初始化的操作,即设定OFS="+++".变量OFS的作用是存储输出字段的分隔符.接着,寻找www的账户行找到后,使用print印出第1至第5个字段,且彼此使用+++隔开.

2.FS也就是字段分隔符的用法:指定输入分隔符---读取文本时,所使用的字段分隔符.

1

2

[root@localhost]# awk '{print $2}' awk.txt | awk 'BEGIN{FS=":"}''{print $1}'

[28/Sep/2010

3.RS表示记录分割符--输入文本信息所使用的换行符

从tomcat日志catalina.out中截取2014-10-13日,在07:00-15:00时间段的日志记录,并保存.

1

2

3

4

awk 'BEGIN{RS="2014-10-13"}$1>"07:00:00"&&$1<"15:50:00"{print RS,$0}' catalina.out > catalins_link.log

       FS表示操作的时候以什么为分割符

       RS表示记录分割符(Record Separator)

       即RS表示的是awk操作最小单位的边界,而FS是这个最小单位中分割的符号

NR :表示打印当前正在处理的输入的行号

1

2

3

4

5

6

7

8

9

10

11

12

awk '{print NR ") " $1 " -> " $(NF-2)}' awk.txt

其中:

        print NR :表示打印当前正在处理的输入的行号

              “ )”:表示以半括号将行号括起来.也可以换成任意的符号,如 ]、#、@、等

 

               $1:  表示打印出第一列的数据.

 

       $(NF-2): 表示从后向前打印出倒数两列数据.

 

输出:

 

1) 07.46.199.184 -> 2002) 123.125.71.19 -> 304

常用操作:

取得系统内存大小:

1

cat /proc/meminfo | awk '/MemTotal/{ print $2 }'

从catalina.out中截取2014-10-13日,在07:00-15:00时间段的日志记录,并保存.

1

awk 'BEGIN{RS="2014-10-13"}$1>"07:00:00"&&$1<"15:50:00"{print RS,$0}' catalina.out > 11106.log

过滤出nginx日志中状态码不是200的请求.

1

2

3

cat access.log |awk '$10!="200"{print $10}'

 

awk '$9 !~ /200/ {print $0}' access.log

 

统计访问时间大于5mm的URL,并进行排序

1

awk '$NF>5 {print $0}' access_mmall.log|awk '{print $12}'|awk -F? '{print $1}'|sort|uniq -c|sort -rbg

 

转载源于https://www.cnblogs.com/saneri/p/5484965.html(梦源)

 

 

windows下需要使用awk命令按如下操作:

1、下载AWK软件:

http://sourceforge.net/projects/gnuwin32/files/gawk/3.1.6-1/gawk-3.1.6-1-bin.zip/download

2、设置awk别名:

      1)Set-ExecutionPolicy RemoteSigned 

      2)Set-Alias awk "D:\Program Filesgawk-3.1.6-1-bin\gawk.exe"

另外删除别名:del Alias:grep

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值