ITPub博客

首页 > > > shell三剑客3

shell三剑客3

作者:longmanma 时间:2019-12-10 13:48:49 0 删除 编辑

5.匹配运算

[root@www ~]# awk -F ':' '$1 ~ "^ro" {print $0}' /etc/passwd

root:x:0:0:root:/root:/bin/bash

[root@www ~]# awk -F ':' '$1 !~ "^ro" {print $0}' /etc/passwd

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

nobody:x:99:99:Nobody:/:/sbin/nologin

systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin

dbus:x:81:81:System message bus:/:/sbin/nologin

polkitd:x:999:997:User for polkitd:/:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

chrony:x:998:996::/var/lib/chrony:/sbin/nologin

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

ntp:x:38:38::/etc/ntp:/sbin/nologin

tcpdump:x:72:72::/:/sbin/nologin

nscd:x:28:28:NSCD Daemon:/:/sbin/nologin

mysql:x:997:995::/home/mysql:/sbin/nologin

www:x:996:994::/home/www:/sbin/nologin

apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

zabbix:x:995:993:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin

saslauth:x:994:76:Saslauthd user:/run/saslauthd:/sbin/nologin

grafana:x:993:992:grafana user:/usr/share/grafana:/sbin/nologin

3.3)awk 环境变量

变量描述

FIELDWIDTHS以空格分隔的数字列表,用空格定义每个数据字段的精确宽度

FS输入字段分隔符号

OFS输出字段分隔符号

RS输入记录分隔符

ORS输出记录分隔符号

FIELDWIDTHS:重定义列宽并打印,注意不可以使用$0打印所有,因为$0是打印本行全内容,不会打印你定义的字段

[root@www ~]# awk 'BEGIN{FIELDWIDTHS="5 2 8"}NR==1{print $1,$2,$3}' /etc/passwd

root: x: 0:0:root

FS:指定数据源中字段分隔符,类似命令选项-F

[root@www ~]# awk 'BEGIN{FS=":"}NR==1{print $1,$3,$NF}' /etc/passwd

root 0 /bin/bash

OFS:指定输出到屏幕后字段的分隔符

[root@www ~]# awk 'BEGIN{FS=":";OFS="-"}NR==1{print $1,$3,$NF}' /etc/passwd

root-0-/bin/bash

RS:指定记录的分隔符

[root@www ~]# awk 'BEGIN{RS=""}{print $1,$13,$25,$37,$49}' test

1 2 3 4 5

将记录的分隔符修改为空行后,所有的行会变成一行,所以所有字段就在一行了。

ORS:输出到屏幕后记录的分隔符,默认为回车

[root@www ~]# awk 'BEGIN{RS="";ORS="*"}{print $1,$13,$25,$37,$49}' test

1 2 3 4 5*[root@www ~]#

可以看出,提示符和输出在一行了,因为默认回车换成了*

3.4)流程控制

if判断语句

for循环语句

while循环语句

do...while语句

循环控制

if判断语句

学习用例

[root@www ~]# cat num

1

2

3

4

5

6

7

8

9

单if语句

打印$1大于5的行

[root@www ~]# awk '{if($1>5)print $0}' num

6

7

8

9

if...else语句

假如$1大于5则除以2输出,否则乘以2输出

[root@www ~]# awk '{if($1>5)print $1/2;else print $1*2}' num

2

4

6

8

10

3

3.5

4

4.5

for循环语句

学习用例

[root@www ~]# cat num2

60 50 100

150 30 10

70 100 40

将一行中的数据都加起来 $1+$2+$3

[root@www ~]# awk '{sum=0;for (i=1;i<4;i++){sum+=$i}print sum}' num2

210

190

210

如果看的不明白可以看下面格式

[root@www ~]# awk '{

> sum=0

> for (i=1;i<4;i++) {

> sum+=$i

> }

> print sum

> }' num2

210

190

210

while循环语句

先判断后执行

学习用例

[root@www ~]# cat num2

60 50 100

150 30 10

70 100 40

将文件中的每行的数值累加,和大于或等于150就停止累加

[root@www ~]# awk '{sum=0;i=1;while(sum<150){sum+=$i;i++}print sum}' num2

210

150

170

如果看的不明白可以看下面格式

[root@www ~]# awk '{

sum=0

i=1

while (sum<150) {

sum+=$i

i++

}

print sum

}' num2

210

150

170

do...while循环语句

先执行后判断

学习用例

[root@www ~]# cat num2

60 50 100

150 30 10

70 100 40

将文件中的每行的数值累加,和大于或等于150就停止累加

[root@www ~]# awk '{sum=0;i=1;do{sum+=$i;i++}while(sum<150);print sum}' num2

210

150

170

如果看的不明白可以看下面格式

[root@www ~]# awk '{

> sum=0

> i=1

> do {

> sum+=$i

> i++

> }while (sum<150)

> print sum

> }' num2

210

150

170

循环控制语句

break 跳出循环,继续执行后续语句

学习用例

[root@www ~]# cat num2

60 50 100

150 30 10

70 100 40

累加每行数值,和大于150停止累加

[root@www ~]# awk '{

> sum=0

> i=1

> while (i<4){

> sum+=$i

> if (sum>150){

> break

> }

> i++

> }

> print sum

> }' num2

210

180

170

四、awk小技巧

学习用例

[root@www ~]# cat test

1 the quick brown fox jumps over the lazy cat . dog

2 the quick brown fox jumps over the lazy cat . dog

3 the quick brown fox jumps over the lazy cat . dog

4 the quick brown fox jumps over the lazy cat . dog

5 the quick brown fox jumps over the lazy cat . dog

打印test文本的行数

[root@www ~]# awk 'END{print NR}' test

5

打印test文本最后一行内容

[root@www ~]# awk 'END{print $0}' test

5 the quick brown fox jumps over the lazy cat . dog

打印test文本列数

[root@www ~]# awk 'END{print NF}' test

12

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2730/viewspace-3120744/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-12-18

  • 博文量
    492
  • 访问量
    11999