awk基础用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了awk基础用法相关的知识,希望对你有一定的参考价值。
awk使用方法
·awk -F ‘ ‘ 指定分割符过滤第几字段
[[email protected] 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 过滤字符在分割段中添加其他符号
[[email protected] src]# awk -F ‘:‘ ‘{print $5"_"$1}‘ passwd
root_root
bin_bin
daemon_daemon
adm_adm
lp_lp
sync_sync
awk匹配以字符为某段的匹配,如匹配第一段包含oo的root字符行
[[email protected] src]# awk -F ":" ‘$1 ~ /oo/‘ passwd
root:x:0:0:root:/root:/bin/bash
awk 过滤匹配字符的行,并以特定分割符输出指定字段内容,多个条件并复用
[[email protected] 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数学运算判断,使用==、>=、!=符号来匹配,{print $0} $0表示匹配整行内容,如果数字条件加上双引号则表示按照alias码排序,字符加上双引号则表示匹配等于或不等于这个字符<br/>匹配等于‘$3==500‘<br/>匹配小于500‘$3<500‘<br/>匹配等于UID的整行内容
[[email protected] src]# awk -F ‘:‘ ‘$3==2334 {print $0}‘ passwd
user:x:2334:2334::/home/user:/bin/bash
匹配等于字符的整行内容的第一和第七段字符,匹配以冒号分割
[[email protected] 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
匹配不等于字符的整行内容的第一和第七段字符,匹配以冒号分割
[[email protected] 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
匹配多个条件的内容,符合匹配条件的会输出显示到屏幕,可以使用&&、|| 逻辑分割来指定多个条件来匹配,表示 “并且” 和 “或者” 的意思
[[email protected] 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 过滤出字段并给予新的分割符
[[email protected] src]# awk -F ‘:‘ ‘{OFS="_"} {print $1,$7}‘ passwd
root_/bin/bash
bin_/sbin/nologin
daemon_/sbin/nologin
adm_/sbin/nologin
awk匹配特定条件的内容并使用OFS来替换分割修饰符
[[email protected] 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表示一段内容
[[email protected] 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以指定的分割符统计一行中的段数,如下
[[email protected] 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‘ 取值文件内容的前三行
[[email protected] 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的遍历输出
[[email protected] 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再重新定义分割符
[[email protected] 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为自定义变量
[[email protected] src]# awk -F ":" ‘{(shu=$3)}; END {print }‘ passwd
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
[[email protected] src]# awk -F ":" ‘{(shu=shu+$4)}; END {print shu}‘ passwd
10346
-
-
-
-
awk正则匹配需要实际实践一遍才能理解其中的功能
以上是关于awk基础用法的主要内容,如果未能解决你的问题,请参考以下文章