Linux学习---shell编程(08-awk)

awk ‘条件1{动作1}条件2{动作2}…’ 文件名

条件(Pattern):

一般适用关系表达式作为条件

动作(Action):

           格式化输出

流程控制语句

simin@iZ25c6i87bkZ:~$ cat test

ID    Name  Age

1     HanMei     21

2     LiLei 22

3     Simin 23

simin@iZ25c6i87bkZ:~$ awk '{printf $1"\t"$3"\n"}' test

ID    Age

1     21

2     22

3     23

simin@iZ25c6i87bkZ:~$

#awk会把文件中的内容按行输入,然后处理

simin@iZ25c6i87bkZ:~$ df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/xvda1       59G  3.2G   53G   6% /

none            4.0K     0  4.0K   0% /sys/fs/cgroup

udev            3.9G  4.0K  3.9G   1% /dev

tmpfs           799M  388K  799M   1% /run

none            5.0M     0  5.0M   0% /run/lock

none            3.9G     0  3.9G   0% /run/shm

none            100M     0  100M   0% /run/user

simin@iZ25c6i87bkZ:~$ df -h|awk '{printf $1"\t" $5"%\n"}'

#注意:ubuntu中要加%,否则系统会认为内容中的%是命令的一部分,centos中不用加%

Filesystem Use%

/dev/xvda1 6%

none  0%

udev  1%

tmpfs 1%

none  0%

none  0%

none  0%s

simin@iZ25c6i87bkZ:~$

simin@iZ25c6i87bkZ:~$ df -h|grep /dev/xvda1 |awk '{printf $5"%\n"}' |cut -d "%" -f 1

6

#这样就可以获得/dev/xvda1分区的使用率了

 

BEGIN关键字

在所有数据提取之前,执行BEGIN后的动作

simin@iZ25c6i87bkZ:~$ awk 'BEGIN{printf "开始啦\n"}{printf $1"\t" $3"\n"}' test

开始啦

ID    Age

1     21

2     22

3   23

它的作用是啥呢

FS内置变量,用于指定分隔符

simin@iZ25c6i87bkZ:~$ awk '{FS=":"}{printf $1"\t" $3"\n"}' /etc/passwd

root:x:0:0:root:/root:/bin/bash   # 看下面注释

daemon     1

bin   2

sys   3

mail  8

。。。

。。。

oxxxx2     1000

simin 1001

 

注释:第一行没有处理,因为awk执行时先读入第一行数据,在执行动作,所以{FS=”:”}指定分隔符的动作在读取第一行数据之后执行,所以第一行只能按照默认分隔符空格分割

simin@iZ25c6i87bkZ:~$ awk 'BEGIN{FS=":"}{printf $1"\t" $3"\n"}' /etc/passwd

root  0

bin   2

sys   3

mail  8

。。。

oxxxx2     1000

simin   1001

用BEGIN指定在读取第一条数据之前,就执行后面的动作{FS=”:”}来指定分隔符,然后才会读取数据

END关键字

所有数据都处理完之后,执行END后的动作

Finishedsimin@iZ25c6i87bkZ:~$ awk 'BEGIN{FS=":"}END{printf"Finished\n"}{printf $1"\t" $3"\n"}' /etc/passwd

root  0

bin   2

sys   3

mail  8

news  9

。。。

oxxxx2     1000

simin 1001

Finished

 

条件判断

simin@iZ25c6i87bkZ:~$ awk 'BEGIN{FS=":"}$3>10{printf $1"\t" $3"\n"}' /etc/passwd

proxy 13

www-data   33

backup     34

list  38

irc   39

gnats 41

nobody     65534

libuuid    100

syslog     101

messagebus 102

ntp   103

sshd  104

oxxxx2     1000

simin   1001

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值