博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
awk
阅读量:5912 次
发布时间:2019-06-19

本文共 1745 字,大约阅读时间需要 5 分钟。

hot3.png

awk(上)

awk兼具sed的所有功能,而且还支持分段

225057_axro_3708406.png

截取文档中某个段

打印文档中的某段,-F作用是指定分隔符

225658_h4fR_3708406.png

打印所有的段awk -F ':' '{print $0}' test.txt

225805_asOT_3708406.png

打印文件的全部内容awk  '{print $0}' test.txt,不需要加F,类似于cat查看文件

230521_Kttt_3708406.png

awk如果不指定分隔符,则默认空格或空白为分隔符

230931_EAlg_3708406.png

打印多段内容awk -F ':' '{print $1,$2,$4}' test.txt

231017_BoL7_3708406.png

打印内容可以指定#来分割,需要用到双引号

231640_XThL_3708406.png

awk匹配功能

awk '/oo/' test.txt ,匹配包含oo的行

231944_i78U_3708406.png

awk -F ':' '$1 ~ /oo/' test.txt ,打印第一段中包含oo的行,~表示匹配

232051_mvZo_3708406.png

awk -F ':' '$1 ~ /o+/' test.txt ,匹配第一段中包含o的行,支持正则表达式;这里需要知道,出现特殊符号时,awk不用加脱义字符,grep和sed则必须要加脱义字符

232454_yBSq_3708406.png

awk支持多个表达式一起写

233212_VOQS_3708406.png

233402_4w0q_3708406.png

针对数学表达式的用法

awk -F ':' '$3==0' test.txt ,匹配第3段等于0的;awk -F ':' '$3==0 {print $1}' test.txt //匹配第3段等于0的,并打印第1段;awk -F ':' '$3>=1000' test.txt //匹配第3段大于等于1000的,并打印所有段

234504_CvTI_3708406.png

awk -F ':' '$3>="1000"' test.txt,“1000”是以ASC码值进行排序的,被认为是字符串

234907_uzbK_3708406.png

awk -F ':' '$7!="/sbin/nologin" {print $0}' test.txt ,匹配出第7段不是/sbin/nologin的所有段,!=表示不匹配

235809_zWdw_3708406.png

awk(下)

条件操作符

awk -F ':' '$3<$4' test.txt ,匹配比较第3段小于第4段的行;awk -F ':' '$3==$4' test.txt,匹配出第3段和第4段相等的行,==就是等于,精确匹配

000142_9YOf_3708406.png

awk -F ':' '$3>"5" && $3<"7"' test.txt ,匹配第3段大于5的,和小于7的行,&&表示并且的意思

000437_suPy_3708406.png

awk -F ':' '$3>1000 || $7=="/sbin/nologin"' test.txt ,匹配第3段大于1000的,或者第7段等于/sbin/nologin的所在的行,|| 表示 或者 的意思

001726_aROd_3708406.png

awk -F ':' '$3>1000 || $7 ~ /bash/' test.txt,匹配第3段大于1000的,或者第7段包含/bash/的

002126_Qx5w_3708406.png

awk的内置变量

常用的变量有OFS、NF和NR,OFS与-F选项有类似的功能,用来定义分隔符,但是在输出时定义

awk -F ':' '{OFS="#"} {if ($3>1000) {print $1,$3,$7}}' test.txt //匹配第3段大于1000,第7段匹配/bash/的,然后打印第1,第3,第7段内容, 并用#分割

003207_j5e0_3708406.png

003857_ecqi_3708406.png

NF表示用分隔符分割后一共有多少行;NR表示行号

004048_BUNb_3708406.png

004226_ia7O_3708406.png

awk -F ':' 'NR<=10' test.txt ,打印前10行;awk -F ':' 'NR<=10 && $1 ~ /root|sync' test.txt,匹配前10行中,第1段包含root或者sync的

005055_fKHi_3708406.png

awk -F ':' 'NF==6 && $1 ~ /root|sync/' test.txt,匹配文件中是6段的,并在第1段包含root或者sync的

005345_Rl4T_3708406.png

awk -F ':' '{print $NR":"$NF}' test.txt

005632_iSvC_3708406.png

head -n3 test.txt |awk -F ':' '$1="root"' ,在前3行中,给第1段赋值为root

010319_muEM_3708406.png

awk -F ':' '{(tot=tot+$3)}; END {print tot}' test.txt,tot值求和,tot默认0开始,每次和新的第三段值相加,最终第三段值加完,输出tot值

010901_BXBO_3708406.png

扩展

转载于:https://my.oschina.net/u/3708406/blog/1577668

你可能感兴趣的文章
android源代码下载——android环境配置
查看>>
发现大量的TIME_WAIT解决办法
查看>>
快速排序算法
查看>>
mysql 替换函数replace()实现mysql 替换字符串
查看>>
SQLite3性能优化1-多线程插入或者查询操作方面
查看>>
POI处理excel2007内存溢出问题
查看>>
Java笔试题(互联网金融方向)
查看>>
连接数据库的错误
查看>>
spring mvc 单例模式
查看>>
阿里云服务器内部dns可能出错
查看>>
生成HTML静态网店系统的优势
查看>>
ubuntu Nodejs和npm的安装
查看>>
Tomcat session共享 —MSM
查看>>
每日一模式之迭代器模式
查看>>
sql server 判断是否存在数据库,表,列,视图。。。。(注:转载)
查看>>
学习 Java 的正确姿势
查看>>
ImportError: Error importing numpy: you should not
查看>>
利用传感器实现微信的摇一摇功能
查看>>
Java 类加载 ——处理同一个类多个版本
查看>>
note4--鸟哥的Linux私房菜
查看>>