码迷,mamicode.com
首页 > 其他好文 > 详细

awk基础用法

时间:2018-07-05 18:23:54      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:正则   login   print   users   The   body   过滤   一段   取值   

awk使用方法
·awk -F ‘ ‘ 指定分割符过滤第几字段

[root@localhost src]# awk -F ‘:‘ ‘{print $7,$5,$1}‘ passwd 
/bin/bash root root
/sbin/nologin bin bin
/sbin/nologin daemon daemon
/sbin/nologin adm adm
/sbin/nologin lp lp
/bin/sync sync sync
/sbin/shutdown shutdown shutdown
/sbin/halt halt halt
/sbin/nologin mail mail

awk 过滤字符在分割段中添加其他符号

[root@localhost src]# awk -F ‘:‘ ‘{print $5"_"$1}‘ passwd 
root_root
bin_bin
daemon_daemon
adm_adm
lp_lp
sync_sync

awk匹配以字符为某段的匹配,如匹配第一段包含oo的root字符行

[root@localhost src]# awk -F ":" ‘$1 ~ /oo/‘ passwd 
root:x:0:0:root:/root:/bin/bash

awk 过滤匹配字符的行,并以特定分割符输出指定字段内容,多个条件并复用

[root@localhost src]# awk -F ‘:‘ ‘/root|user/ {print $1,$5} /ftp/ {print $1,$3,$5,$7}‘ passwd 
root root
operator operator
ftp 14 FTP User /sbin/nologin
tss Account used by the trousers package to sandbox the tcsd daemon
user1 
user 
user2 
saslauth Saslauthd user

awk数学运算判断,使用==、&gt;=、!=符号来匹配,{print $0} $0表示匹配整行内容,如果数字条件加上双引号则表示按照alias码排序,字符加上双引号则表示匹配等于或不等于这个字符<br/>匹配等于‘$3==500‘<br/>匹配小于500‘$3&lt;500‘<br/>匹配等于UID的整行内容

[root@localhost src]# awk -F ‘:‘ ‘$3==2334 {print $0}‘ passwd 
user:x:2334:2334::/home/user:/bin/bash

匹配等于字符的整行内容的第一和第七段字符,匹配以冒号分割

[root@localhost src]# awk -F ":" ‘$7!="/sbin/nologin" {print $1,$7}‘ passwd 
root /bin/bash
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
xiang /bin/bash
user1 /bin/bash
user /bin/bash
xiangchen /bin/bash

匹配不等于字符的整行内容的第一和第七段字符,匹配以冒号分割

[root@localhost src]# awk -F ":" ‘$7=="/sbin/nologin" {print $1,$7}‘ passwd 
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
mail /sbin/nologin
operator /sbin/nologin
games /sbin/nologin
ftp /sbin/nologin
nobody /sbin/nologin

匹配多个条件的内容,符合匹配条件的会输出显示到屏幕,可以使用&&、|| 逻辑分割来指定多个条件来匹配,表示 “并且” 和 “或者” 的意思

[root@localhost src]# awk -F ":" ‘$3==1000 || $7 ~ /bash/‘ passwd 
root:x:0:0:root:/root:/bin/bash
xiang:x:1000:1000::/home/xiang:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user:x:1002:1002::/home/user:/bin/bash
xiangchen:x:2334:2334::/home/xiangchen:/bin/bash

awk替换-F指定的分割符,使用OFS内置函数来指定print 过滤出字段并给予新的分割符

[root@localhost src]# awk -F ‘:‘ ‘{OFS="_"} {print $1,$7}‘ passwd 
root_/bin/bash
bin_/sbin/nologin
daemon_/sbin/nologin
adm_/sbin/nologin

awk匹配特定条件的内容并使用OFS来替换分割修饰符

[root@localhost src]# awk -F ":" ‘{OFS="_"} $3>1000 {print $1,$2,$3,$7}‘ passwd 
user1_x_1001_/bin/bash
user_x_1002_/bin/bash
user2_x_1212_/sbin/nologin
xiangchen_x_2334_/bin/bash

awk内置函数有OFS、NR、NF
NR表示一行内容,NF表示一段内容

[root@localhost src]# awk -F ":" ‘{print NR":" $0}‘ passwd 
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync

NF以指定的分割符统计一行中的段数,如下

[root@localhost src]# awk -F ":" ‘{print NF":" $0}‘ passwd 
6:rootx:0:0:root:/root:/bin/bash
7:bin:x:1:1:bin:/bin:/sbin/nologin
7:daemon:x:2:2:daemon:/sbin:/sbin/nologin
7:adm:x:3:4:adm:/var/adm:/sbin/nologin

NR匹配文件中的多少行内容,表达式为‘NR<=3‘ 取值文件内容的前三行

[root@localhost src]# awk -F ":" ‘NR<=3‘ passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

遍历NR统计的结果输出和NF的遍历输出

[root@localhost src]# awk -F ‘:‘ ‘{print $NR":"$NF}‘ passwd 
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

awk匹配特定的字符并赋予新的值,分段符会变为空,可以使用OFS再重新定义分割符

[root@localhost src]# awk -F ‘:‘ ‘{OFS="#"} $1="root"‘ passwd |head -n5
root#0#0#root#/root#/bin/bash
root#x#1#1#bin#/bin#/sbin/nologin
root#x#2#2#daemon#/sbin#/sbin/nologin
root#x#3#4#adm#/var/adm#/sbin/nologin
root#x#4#7#lp#/var/spool/lpd#/sbin/nologin

awk对某段的数字循环相加,使用print来遍历所有的行,这里匹配所有的用户UID数值并相加,shu为自定义变量

[root@localhost src]# awk -F ":" ‘{(shu=$3)}; END {print }‘ passwd 
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin

[root@localhost src]# awk -F ":" ‘{(shu=shu+$4)}; END {print shu}‘ passwd 
10346

-

-

-

-

awk正则匹配需要实际实践一遍才能理解其中的功能

awk基础用法

标签:正则   login   print   users   The   body   过滤   一段   取值   

原文地址:http://blog.51cto.com/8844414/2136800

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!