六周第三次课(4月27日)
9.6/9.7 awk
扩展
把这里面的所有练习题做一下
http://www.apelearn.com/study_v2/chapter14.html
语法
awk '{pattern + action}' {filenames}
由于模式和动作两者任一都可选,需要用大括号包围动作以区分于其他模式
用单引号包围防止解释$等字符, 也允许程序的长度超过一行
默认支持特殊字符
参数
-F
指定分隔符, 不指定则默认以空格或空白字符为分隔符OFS
: 指定print时用的分隔符. 先写OFS, 再写print.- 示例
awk -F ':' '{OFS="#"} $3>1000 || $7 ~ /bash/ {print $1,$3,$7}' test.txt
awk -F ':' '{OFS="#"} {if($3>1000) {print $1,$2,$3,$4}}' /etc/passwd
head -5 /etc/passwd |awk -F ':' '{OFS="#"} {print $1,$3, $4}'
- 示例
NR
: 读取到的行数. Number of RecordNF
: 字段数. Number of Fileds$NF
: 最后一个字段的值- 示例
awk -F ':' '{print $1}' test.txt
打印passwd文件里行的第一段.
awk '{print $0}' test.txt
$0表示所有的段
awk '{print $1,$3,$4}' test.txt
多要几段
awk '{print $1"#"$3"#"$4}' test.txt
分隔符用#号
head -n3 /etc/passwd |awk -F ':' '{print NR}'
打印行号
head -n3 /etc/passwd |awk -F ':' '{print NF}'
打印有多少段
awk -F ':' 'NR<=10' test.txt
前10行. 可以作为判断条件.
awk -F ':' 'NR<20 && $1 ~/roo/' /etc/passwd
也可以多个条件一起用
awk -F ':' 'NR<=10 && $1 ~ /root|sync/' test.txt
awk -F ':' '{print $NR":"$NF}' test.txt
相当于$1:$7
$2:$7
$3:$7
…
- 示例
两个字段相互比较
awk -F ':' '$3<$4' /etc/passwd
awk -F ':' '$3==$4' /etc/passwd
awk -F ':' '$3>"5" && $3<"7"' /etc/passwd
并且
awk -F ':' '$3>1000 || $7=="/bin/bash"' /etc/passwd
或者
awk -F ':' '$3>1000 || $7 ~ /bash/' /etc/passwd
awk '{if(NR>=20 && NR<=30) print $1}' test.txt
打印第20-30行内容
条件判断
awk -F ':' '$3==0' test.txt
awk -F ':' '$3=="0"' test.txt
加双引号为字符串, 相当于sort 不加-n, 按asc码排序
awk -F ':' '$7!="/sbin/nologin" {print $0}' test.txt
awk -F ':' '{if ($1=="root") {print $0}}' test.txt
df | awk '$4>500000'
df -h | awk -F '[ %]+' '{print $5}'| grep -v Use
处理时可选择多个分隔符
匹配功能
awk '/oo/' test.txt
打印包含oo的行
awk -F ':' '$1 ~ /oo/' test.txt
只要第一段包含oo的行
awk -F ':' '$1 ~ /o+/' test.txt
只要第一段包含o的行
awk -F ':' '/root/ {print $1,$3} /user/ {print $1,$3,$4}' test.txt
支持多个表达式一起写
awk -F ':' '/root|user/ {print $0}' test.txt
awk '{print ($1,$3~/^[0-9]/?$3:$4)}' /etc/redhat-release
awk -F'[= "]' '/PRETTY_NAME/{print $3,$4,$5}' /etc/os-release
BEGIN模块
BEGIN 用于匹配第一个输入文件的第一行之前的位置
– 示例
BEGIN { print "Name RATE HOURS"; print ""} # print ""打印一个空行
{ print } #打印当前输入行
END模块
处理完输入文件中所有行后执行这个块。END块一般用于执行最终计算或打印应该出现在输出流结尾的摘要信息。
示例
awk -F ':' '{(tot=tot+$3)}; END {print tot}' test.txt
求和一列
awk 'BEGIN {count=0;print "[start] user count is ",count} {count=count+1;print $0} END{print "[end] user count is ",count}' /etc/passwd
用awk查看服务器连接状态并汇总
netstat -an|awk '/^tcp/{++s[$NF]}END{for(a in s)print a,s[a]}'
未经允许不得转载:外贸SOHO笔记 » W6-C3-0427
精彩评论
不用翻吧
币种不一样, 按你注册时选的区域来的
加速用的
Press any key to start...or Press Ctrl+C to cancel [Info] C
感谢楼主,顺便分享个自用的防封梯子:https://xbsj3462.fun/i/xy049,速度快延迟低,新用户注册免
您好 感谢大神的教程 按着您的教程安装了 ssr和trojan 但是每隔一两天就连不上了 甚至在gcp本身的管理页用
第五步没看懂什么意思
您的免费试用赠金还剩 NT$9,067.00 每月估算费用为 $5.40 每小时约为 $0.007 用多少,付多少