正则表达式之awk

awk
也是一种流编辑器,逐行执行,兼具sed的所有功能,且更强大

截取打印
awk -F ':' '{print $0}', 打印所有段
awk -F ':' '{print $1}', 打印第一段
awk -F ':' '{print $1“#”$2"#"$3"#"$4}' 打印第1,2,3,4段
awk '/tt/' test 打印包含tt的行, 未使用F时,默认以空格或空格字符打印

正则表达
awk -F ‘:’ '$1~/tt/' test 匹配第一段包含tt的行
awk -F ‘:’ '$1~/t+/' test 匹配第一段包含t重复一次以上的行
awk -F ‘:’ '$1~/tt+/' test 匹配第一段包含tt重复一次以上的行
awk -F ‘:’ '/root/ {print$1,$3} /tts/ {print $1,$3}' test 匹配包含root的行并打印1,3段,再匹配包含tts的行并打印1,3行

数学运算
awk -F ':' '$3==0' /etc/passwd 打印第3段等于0的行
awk -F ':' '$3==0 {print $1}’ /etc/passwd 匹配第3段等于0的行并打印第1段
awk -F ':' '$3>==1000 {print $1}‘ /etc/passwd 匹配第3段大于等于1000的行并打印第1段
awk -F ':' '$3>== 1000 {print $1}‘ /etc/passwd , 匹配第3段以ASCII嘛排序的行并打印第1段
awk -F ':' '$6!="/sbin/nologin" {print $0}‘ /etc/passwd 打印第6段不等于/sbin/nologin的所有行, =号后面内容是字符串的需要用“”号括起来
awk -F ':' '$3>1000 || $7=="/sbin/nologin"‘ /etc/passwd 打印第3段大于1000 或者第7段等于/sin/nologin的行
awk -F ':' '$3>1000 || $7 ~ /bash‘ /etc/passwd 打印第3段大于1000,或第7段包含/bash的行
awk -F ':' '$3>$4‘ /etc/passwd 打印第3段大于第4段的行
awk -F ':' '$3<$4‘ /etc/passwd 打印第3段小于第4段的行
awk -F ':' '$3==$4‘ /etc/passwd 打印第3段等于第4段的行
awk -F ':' '$3>“5” && $3<"7"' /etc/passwd 打印第3段包含5和7之间数字的行

内置变量OFS
awk -F ':' '{OFS="#"}{print $1,$3,$4}' 指定print的分隔符变量为#,定打印1,3,4行
awk -F ':' '{print NF}' 打印段号
awk -F ':' '{print NR}' 打印行号
awk -F ':' 'NR<40' /etc/passwd 打印行号小于40的行
awk 'NF<5' /etc/passwd 打印段号小于5的所有行
awk -F ':' 'NR<20 && $1 ~ /root/' /etc/passwd 打印行号小于20且第1段包含root的行
awk -F ':' 'NF<6 && $1 ~ /root|sync/' /etc/passwd 打印段号小于6且第1段包含root或者sync的行
awk -F ':' '{print $NF":"$NR}' /etc/passwd 打印NR和NF所有组合的所有行
awk -F ':' '$1="root"' /etc/passwd 给第1段赋值root, 会分隔符:会消失,可用OFS指定
awk -F ':' '{(tot=tot+$3)}; END {print tot}' /etc/passwd 求和第3列(所有第3段),并打印
awk -F ':' '{if ($1=="root") {print $0}}' /etc/passwd 判断第1行等于root的所有行并打印

猜你喜欢

转载自blog.csdn.net/langyue919/article/details/80116866