Linux学习总结(二十一)正则三剑客之awk

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习总结(二十一)正则三剑客之awk相关的知识,希望对你有一定的参考价值。

awk 也是流式编辑器,它比sed的功能更强大

1.截取文档中的某段

awk -F ‘:‘ ‘{print $1}‘ /etc/passwd |head -2
-F 指定分割符,不指定以空格或者tab为分隔符
print 为打印动作
$1 为第一字段, $2 为第二字段,依次类推,$0标示整行
那么打印整个文档就是
awk ‘{print $0}‘ /etc/passwd
print 还可以打印自定义的内容,要用双引号括起来
awk -F‘:‘ ‘{print $1"#"$2"#"$3"#"$4}‘ /etc/passwd |head -2
技术分享图片
意思是以冒号分割打印前四段,每段用#号分开

2.匹配字符或字符串

awk ‘/root/‘ /etc/passwd 匹配含有root的行,该用法跟sed 类似
让某个字段去匹配
awk -F ‘:‘ ‘$1 ~/da/‘ /etc/passwd
技术分享图片
awk还可以多次匹配,只打印所匹配的段
awk -F ‘:‘ ‘/root/ {print $1 $3} /test/ {print $1 $3}‘ /etc/passwd
技术分享图片
意思是先找出带有关键词root ,test的行,再打印出这些行指定的字段

3.条件操作符

根据逻辑判断筛选 比如==,<,<=,>,>=,!=
awk -F ‘:‘ ‘$3==0‘ /etc/passwd
awk -F ‘:‘ ‘$3>=500‘ /etc/passwd 这样我们就筛选出了普通用户
技术分享图片
逻辑符号后面的数字如果用双引号引起来,则按照字符处理
举一个!=的例子
awk -F ‘:‘ ‘$7!="/sbin/nologin"‘ /etc/passwd
技术分享图片
当然我们也可以根据字段处理
awk -F ‘:‘ ‘$3<$4‘ /etc/passwd
技术分享图片
另外还可以使用 && 和 || 表示 “并且” 和 “或者” 的意思
awk -F ‘:‘ ‘$3<$4 && $3<10‘ /etc/passwd
awk -F ‘:‘ ‘$3>=500 || $3<1‘ /etc/passwd
技术分享图片

4.awk内置变量

NF :用分隔符分隔后一共有多少段
NR :行数
awk -F ‘:‘ ‘{print NF}‘ /etc/passwd |head -3
awk -F ‘:‘ ‘{print NR}‘ /etc/passwd |head -3

技术分享图片
用行号作为判断条件晒筛选,也可以同时匹配某段字符
awk ‘"NR">20‘ /etc/passwd
awk -F ‘:‘ ‘NR>20 && $1~/test/‘ /etc/passwd

技术分享图片

5.awk 中的数学运算

更改某字段的内容输出
awk -F ‘:‘ ‘$1="root"‘ /etc/passwd |head -3
以冒号分割,将第一段替换为root
技术分享图片
awk还可以对各个段的值进行数学运算:
awk -F ‘:‘ ‘{$7=$3+$4;print $0}‘ /etc/passwd |head -3
该语句标示将第三段和第四段求和后替换第七段
技术分享图片
还可以计算某一列的和
head -3 /etc/passwd |awk -F ‘:‘ ‘{(sum=sum+$3)}; END {print sum}‘
技术分享图片
这里我们选了文件前三行,统计了以冒号分割的第三列数字之和,sum是变量可以任意取,END是关键词类似shell脚本的done ,其实该命令已经相当于一个带有循环语句的简单脚本了
在awk中使用if判断,for循环都可以,举一个if例子
awk -F ‘:‘ ‘{if ($3>=500) print $0}‘ /etc/passwd
技术分享图片

以上是关于Linux学习总结(二十一)正则三剑客之awk的主要内容,如果未能解决你的问题,请参考以下文章

Linux 学习总结(十九)正则三剑客之grep

Shell编程之正则表达式三剑客——awk工具

Linux之三剑客

linux基础学习-18-linux三剑客之awk命令精讲

linux12shell编程 --> 三剑客之awk命令

Linux三剑客之awk命令