7月5日任务9.6-9.7

9.6/9.7 awk

 

-F表示指定分隔符

如果不用F,就是不指定分隔符,默认用空格或者空白为分隔符

 

head -n2 test.txt|awk -F ':' '{print $1}'

打印第一段(也不会更改文本内容)

[root@vultr awk]# awk -F ':' '{print $1}' passwd

root

bin

ROOT

rOOT

root

oooo

ooo

daemon

adm

lp

sync

[root@vultr awk]# awk -F ':' '{print $0}' passwd

$0表示所有的段

head -n2 test.txt|awk -F ':' '{print $0}'

 

打印几段的时候,用逗号分隔

[root@vultr awk]# awk -F ':' '{print $1,$2,$3}' passwd

root x 0

bin x 1

ROOT 999 sdfdf

rOOT dsd 112222

root 99 sdsd

oooo oooo 0

ooo oooooooo

daemon x 2

adm x 3

lp x 4

sync x 5

shutdown x 6

halt x 7

 

指定分割符为#号,必须用双引号

awk -F ':' '{print $1"#"$2"#"$3"#"$4}'

 

匹配功能

awk '/oo/' test.txt

列出有oo的行

 

awk -F ':' '$1 ~/oo/' test.txt

列出第一段有oo的行

[root@vultr awk]# awk -F ':' '$1 ~ /o+/' passwd

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

root:99:sdsd

oooo:oooo:0:9

ooo:oooooooo

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

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

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

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

systemd-network:x:192:192:systemd Network Management:/:/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

 

 

awk -F ':' '/root/ {print $1,$3} /test/ {print $1,$3}' test.txt

支持多个表达式一起写

aae1e28137347dfbbb959f95d7250387d8e.jpg

awk -F ':' /root|user/ {print $0}' passwd

和写在一起

a91a9bb9d0949c61077cda030c9e6e31685.jpg

 

 

awk -F ':' '$3=="0"' /etc/passwd

awk -F ':' '$3>="500"' /etc/passwd

加了双引号表示的是字符串,而不是数字

awk -F ':' '$3>=500' /etc/passwd

不加双引号这是针对数字的大小

[root@vultr awk]# awk -F ':' '$3>="500"' passwd

ROOT:999:sdfdf

root:99:sdsd

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

nobody:x:99:99:Nobody:/:/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

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

[root@vultr awk]# awk -F ':' '$3>=500' passwd

ROOT:999:sdfdf

rOOT:dsd:112222

root:99:sdsd

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

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

xqiang1:x:1000:1000::/home/xqiang1:/bin/bash

xqiang:x:1001:1001::/home/xqiang:/bin/bash

user1:x:1002:1003::/home/user1:/bin/bash

user3:x:1004:1004::/home/user3:/bin/bash

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

 

字段间的比较

awk -F ':' '$7!="/sbin/nologin"' /etc/passwd

awk -F ':' '$3<$4' /etc/passwd

 

awk -F ':' '$3>"5" && $3<"7"' /etc/passwd

[root@vultr awk]# awk -F ':' '$3>"5" && $3<"7"' passwd

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

 

awk -F ':' '$3>1000 || $7=="/bin/bash"' /etc/passwd

||表示或者

awk -F ':' '$3>1000 || $7 ~ /bin/bash' passwd

[root@vultr awk]# awk -F ':' '$3>1000 || $7 ~ /bin/bash' passwd

ROOT:999:sdfdf

rOOT:dsd:112222

root:99:sdsd

xqiang:x:1001:1001::/home/xqiang:/bin/bash

user1:x:1002:1003::/home/user1:/bin/bash

user3:x:1004:1004::/home/user3:/bin/bash

 

 

head -5 passwd |awk -F ':' '{OFS="#"} {print $1,$3,$4}'

OFS 表示 print 显示的分隔符

 

awk -F ':' '{OFS="#"} {if ($3>1000) {print $1,$2,$3,$4}}' /passwd

[root@vultr awk]# awk -F ':' '{OFS="#"} {if ($3>1000) {print $1,$2,$3,$4}}' passwd

ROOT#999#sdfdf#

rOOT#dsd#112222#

root#99#sdsd#

xqiang#x#1001#1001

user1#x#1002#1003

user3#x#1004#1004

 

 

NR 表示当前表示的行是第几行, NF 表示当前行有几段

head -n3 passwd | awk -F ':' '{print NF}'

[root@vultr awk]# head -n3 passwd | awk -F ':' '{print NF}'

7

7

3

[root@vultr awk]# head -n3 passwd

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

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

ROOT:999:sdfdf

 

 

 

head -n3 passwd | awk -F ':' '{print NR}‘

 

awk 'NR>40' /etc/passwd

awk -F ':' 'NR<20 && $1 ~ /roo/' /etc/passwd

head -n 3 /etc/passwd |awk -F ':' '$1="root"‘

awk -F ':' '{(tot=tot+$3)}; END {print tot}' /etc/passwd

把文件所有行的第3段加起来

 

awk -F ':' '{if ($1=="root") {print $0}}' passwd

如果第一段=root,就显示出一整行

 

转载于:https://my.oschina.net/u/3873515/blog/1840597

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值