10月18日任务

awk(上下)(分段,有规律的文件,分段去匹配,不更改文本内容

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

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

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

awk '/oo/' test.txt 

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

awk -F ':' '/root/ {print $1,$3} /test/ {print $1,$3}' test.txt    包含root的行的第1,第3段  包含test第1,第3段

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

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

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

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

 

指定分割符-F    '{print $段数}' 指定打印的段

[root@test ~]# head passwd3|awk -F ':' '{print $1}'

root

bin

daemon

adm

lp

sync

shutdown

halt

mail

operator

 

打印所有的段  {print $0}  $0表示所有的段  相当于cat功能,可以不指定分割符

[root@test ~]# awk -F ':' '{print $0}' passwd3

 

不指定分割符则以空格为分割

[root@test ~]# awk '{print $1}' 4.txt

1

aa

dsad,dsadsa

[root@test ~]# cat 4.txt

1 2

aa  bb

dsad,dsadsa  dasdasda,dsadsad

 

打印多个段  '{print $1,$3,$4}'

[root@test ~]# head passwd3|awk -F ':' '{print $1,$3,$4}'

root 0 0

bin 1 1

daemon 2 2

adm 3 4

lp 4 7

sync 5 0

shutdown 6 0

halt 7 0

mail 8 12

operator 11 0

 

指定打印出来的段以指定分隔符分割  '{print $1"%"$3"#"$4}'  段之间用双引号引起来并且指定符号

[root@test ~]# head passwd3|awk -F ':' '{print $1"%"$3"#"$4}'

root%0#0

bin%1#1

daemon%2#2

adm%3#4

lp%4#7

sync%5#0

shutdown%6#0

halt%7#0

mail%8#12

operator%11#0

 

匹配功能

[root@test ~]# awk '/oo/' passwd3

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

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

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

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

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

setroubleshoot:x:990:984::/var/lib/setroubleshoot:/sbin/nologin

 

匹配指定的段中有指定的字符,打印此行  '$1 ~ /oo/'表示第一段中含有00字符

[root@test ~]# awk -F ':' '$1 ~ /oo/' passwd3

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

setroubleshoot:x:990:984::/var/lib/setroubleshoot:/sbin/nologin

 

正则表达式  (不需要加脱义字符)

第一段中有o字符匹配

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

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

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-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin

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

polkitd:x:998:996:User for polkitd:/:/sbin/nologin

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

chrony:x:997:995::/var/lib/chrony:/sbin/nologin

geoclue:x:996:992:User for geoclue:/var/lib/geoclue:/sbin/nologin

unbound:x:993:990:Unbound DNS resolver:/etc/unbound:/sbin/nologin

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

colord:x:992:986:User for colord:/var/lib/colord:/sbin/nologin

gnome-initial-setup:x:991:985::/run/gnome-initial-setup/:/sbin/nologin

setroubleshoot:x:990:984::/var/lib/setroubleshoot:/sbin/nologin

 

[root@test ~]# awk -F ':' '$1 ~ /oo+/' passwd3

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

setroubleshoot:x:990:984::/var/lib/setroubleshoot:/sbin/nologin

 

多个表达式同时实现()

满足有关键词root的行打印第一段和第二段,有关键词ssh打印第六段第七段

[root@test ~]# awk -F ':' '/root/ {print $1,$2} /ssh/ {print $6,$7}' passwd3

root x

operator x

/var/empty/sshd /sbin/nologin

 

[root@test ~]# awk -F ':' '/root/ {print $1,$2} /ar+/ {print $6,$7}' passwd3

root x

/var/adm /sbin/nologin

/var/spool/lpd /sbin/nologin

/var/spool/mail /sbin/nologin

operator x

/var/ftp /sbin/nologin

/var/spool/postfix /sbin/nologin

/var/empty/sshd /sbin/nologin

/var/lib/chrony /sbin/nologin

/var/lib/rpcbind /sbin/nologin

/var/lib/geoclue /sbin/nologin

/var/run/gluster /sbin/nologin

/var/run/pulse /sbin/nologin

/var/lib/nfs /sbin/nologin

/var/lib/nfs /sbin/nologin

/var/lib/colord /sbin/nologin

/var/lib/gdm /sbin/nologin

/var/run/avahi-daemon /sbin/nologin

/var/lib/setroubleshoot /sbin/nologin

验证:[root@test ~]# egrep 'root|ar+' passwd3

f448e00328ba30181267f8d56c72e42ad27.jpg

[root@test ~]# awk -F ':' '/root|ar+/ {print $0}' passwd3

13a91634f793c5a59b0bdb1a660f103d557.jpg

 

数学表达式匹配

等于需要写两个等于号

[root@test ~]# awk -F ':' '$3==0' passwd3

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

[root@test ~]# awk -F ':' '$3==0 {print $0}' passwd3

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

[root@test ~]# awk -F ':' '$3==0 {print $1}' passwd3

root

[root@test ~]# awk -F ':' '$3==0 {print $1 $3}' passwd3

root0

[root@test ~]# awk -F ':' '$3==0 {print $1"#" $3}' passwd3

root#0

 

大于等于>=

[root@test ~]# awk -F ':' '$3>=500 {print $1"#" $3}' passwd3

systemd-bus-proxy#999

polkitd#998

chrony#997

geoclue#996

saslauth#995

gluster#994

unbound#993

nfsnobody#65534

colord#992

gnome-initial-setup#991

setroubleshoot#990

 

数值加上双引号则使用ASCII码排序

[root@test ~]# awk -F ':' '$3>="500" {print $1"#" $3}' passwd3

shutdown#6

halt#7

mail#8

nobody#99

systemd-bus-proxy#999

dbus#81

polkitd#998

tss#59

postfix#89

sshd#74

chrony#997

geoclue#996

radvd#75

saslauth#995

gluster#994

unbound#993

nfsnobody#65534

colord#992

gnome-initial-setup#991

avahi#70

setroubleshoot#990

 

小于等<=

[root@test ~]# awk -F ':' '$3<=100 {print $1"#" $3}' passwd3

root#0

bin#1

daemon#2

adm#3

lp#4

sync#5

shutdown#6

halt#7

mail#8

operator#11

games#12

ftp#14

nobody#99

dbus#81

tss#59

postfix#89

sshd#74

rpc#32

radvd#75

rpcuser#29

gdm#42

avahi#70

 

不等于!=  字符串时需要加双引号

[root@test ~]# awk -F ':' '$7!="/sbin/nologin" {print $0}' passwd3

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

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

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

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

 

 

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

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

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

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

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

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

head -n3 /etc/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     tot=tot+$3  意思是,新的tot的值,为旧的tot的值和$3的值的和

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

 

两个字段比较

[root@test ~]# awk -F ':' '$3<$4' passwd3

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

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

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

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

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

 

[root@test ~]# awk -F ':' '$3==$4' passwd3

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

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

daemon:x:2:2:daemon:/sbin:/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

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

abrt:x:173:173::/etc/abrt:/sbin/nologin

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

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

rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin

rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin

radvd:x:75:75:radvd user:/:/sbin/nologin

qemu:x:107:107:qemu user:/:/sbin/nologin

usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin

pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin

rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

gdm:x:42:42::/var/lib/gdm:/sbin/nologin

avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin

 

&&并且段同时满足条件

[root@test ~]# awk -F ':' '$3>"5" && $3<"7"' passwd3  ASCII码排序

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

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

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

 

[root@test ~]# awk -F ':' '$3>5 && $3<7' passwd3  纯数字比较

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

 

||或者功能,满足一个条件或者所有条件都满足

[root@test ~]# awk -F ':' '$3>1000 || $7=="/sbin/nologin"' passwd3

~匹配关键词

[root@test ~]# awk -F ':' '$3>1000 || $7 ~ /bash/' passwd3

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

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

 

OFS内置变量,-F指定分段前的分割符,OFS指定print时候用的分隔符

[root@test ~]# head -n15  passwd3 | awk -F ':' '{OFS="*"} $3>800 || $7 ~ /bash/ {print $1,$3,$7}'

root*0*/bin/bash

systemd-bus-proxy*999*/sbin/nologin

 

定义条件和打印的段写在一起          {if ($3>1000) {print $1,$2,$3,$4}将条件一起写入用大括号括起来变为一个整体  (比较正统)

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

nfsnobody#x#65534#65534

 

内置变量  NR 表示行  NF表示段  都为数字

打印行号 print NR":"$0   每个行前面加行号 冒号 内容

[root@test ~]# awk -F ':' '{print NR":"$0}' passwd3

33e11908199bdef38056c6b194e6661c63b.jpg

 

打印出每行有多少段,打印在行前面  print NF":"$0

[root@test ~]# awk -F ':' '{print NF":"$0}' passwd3

7b4172f4ff532a2036dfca1cb0f0b4d3dd6.jpg

 

NR/NF作为判断条件

前十行打印

[root@test ~]# awk -F ':' 'NR<=10' passwd3

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

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

前十行并且第一段匹配root或者shutdown关键词

[root@test ~]# awk -F ':' 'NR<=10 && $1 ~ /root|shutdown/' passwd3

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

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

段满足要求

[root@test ~]# awk -F ':' 'NF==7 && $1 ~ /root|shutdown/' passwd3

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

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

 

print $NR"#"$NF   $NR表示第一行打印第一段,第二行打印第二段以此类推, $NF打印每一行打印按照段数的第几段,这里都是7段所以所有行打印第七段

[root@test ~]# awk -F ':' '{print $NR"#"$NF}' passwd3

root#/bin/bash

x#/sbin/nologin

2#/sbin/nologin

4#/sbin/nologin

lp#/sbin/nologin

/sbin#/bin/sync

/sbin/shutdown#/sbin/shutdown

#/sbin/halt

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

#/sbin/nologin

 

将指定段赋值  '$1="root"' 单独一个等于叫做赋值

[root@test ~]# head -n3 passwd3 |awk -F ':' '$1="root"'

root x 0 0 root /root /bin/bash

root x 1 1 bin /bin /sbin/nologin

root x 2 2 daemon /sbin /sbin/nologin

[root@test ~]# head -n3 passwd3 |awk -F ':' '{OFS="@"} $1="root"'  (规范)

root@x@0@0@root@/root@/bin/bash

root@x@1@1@bin@/bin@/sbin/nologin

root@x@2@2@daemon@/sbin@/sbin/nologin

 

 

tot求和  tot=tot+$3 每次循环第三段值相加,     起始位0,第一次循环是0加第一行的$3 第二次循环是第一行的$3加第二行的$3 以此类推,求和一列

[root@test ~]# awk -F ':' '{(tot=tot+$3)}; END {print tot}' passwd3

77130

转载于:https://my.oschina.net/u/3803396/blog/2248645

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值