DAY5

awk(上)

相比sed,awk功能更丰富,支持分段

创建awk目录

mkdir awk

cd wak

拷贝passwd到wak目录,改名为test.txt

cp /etc/passwd test.txt

过滤第一段,以冒号为分隔符,-F ':‘表示指定以冒号为分隔符,’{print $1}'表示第一段字符

awk -F ‘:’ ‘{print $1}’ test.txt
在这里插入图片描述

打印出所有字符,’{print $1}'表示所有段

awk -F ‘:’ ‘{print $0}’ test.txt
在这里插入图片描述

打印出所有字符,没有用F指定分隔符,默认以空格或空白字符为分隔符

awk ‘{print $0}’ test.txt
在这里插入图片描述

以冒号为分隔符,过滤出1、3、4段,’{print $1,$3,$4}'表示1、3、4段字符

awk -F’:’ ‘{print $1,$3,$4}’ test.txt

在这里插入图片描述

以冒号为分隔符,过滤出1、3、4段,并以#号分隔

awk -F’:’ ‘{print $1"#"$3"#"$4}’ test.txt
在这里插入图片描述

过滤出带有oo的行

awk ‘/oo/’ test.txt
在这里插入图片描述

过滤出第一段带有oo的行,’$1 ~ /oo/'表示第一段且包含oo

awk -F’:’ ‘$1 ~ /oo/’ test.txt

在这里插入图片描述

过滤出第一段有o的行,o+表示一个或多个o

awk -F’:’ ‘$1 ~ /o+/’ test.txt
在这里插入图片描述

打印出包含root的行的第一、三段,打印出包含user的行的第1、3、4段,’/root/ {print $1,$3} /user/ {print $1,$3,$4}'表示包含root的行的第1、3段或者包含user的行的第1、3、4段

awk -F ‘:’ ‘/root/ {print $1,$3} /user/ {print $1,$3,$4}’ test.txt
在这里插入图片描述

在这里插入图片描述

过滤出第三段等于0的行,’$3==0’表示第三段等于0

awk -F ‘:’ ‘$3==0’ test.txt

在这里插入图片描述

过滤出第三段大于等于1000的行的第一段,’$3>=1000 {print $1}’ 表示第三段大于等于1000的第一段(需要如果是针对数字的话,不能加双引号)

awk -F ‘:’ ‘$3>=0 {print $1}’ test.txt

过滤出第七段不等于/sbin/nologin的行,’$7!="/sbin/nologin" {print $0}'表示第七段不等于/sbin/nologin(字符串要加双引号)

awk -F ‘:’ ‘$7!="/sbin/nologin" {print $0}’ test.txt

二、awk(下)
过滤出第三段小于第四段的行

awk -F ‘:’ ‘$3<$4’ test.txt
在这里插入图片描述

过滤出第三段等于第四段的行

awk -F ‘:’ ‘$3==$4’ test.txt
在这里插入图片描述

过滤出第三段大于5并且小于7的行,&&表示并且

awk -F ‘:’ ‘$3>“5” && $3<“7”’ test.txt
在这里插入图片描述

过滤出第三段大于1000或者第七段等于/sbin/nologin的行,||表示或者

awk -F ‘:’ ‘$3>1000 || $7=="/sbin/nologin"’ test.txt

在这里插入图片描述

过滤出第三段大于1000或者第七段带有bash的行,~ /bash/表示匹配bash

awk -F ‘:’ ‘$3>1000 || $7 ~ /bash/’ test.txt

在这里插入图片描述
过滤出第三段大于1000或者第七段带有bash的行的第1、3、7段,用#号分隔

awk -F ‘:’ ‘{OFS="#"} $3>1000 || $7 ~ /bash/ {print $1,$3,$7}’ test.txt
在这里插入图片描述

过滤出第三段大于1000的行的第1、2、3、4段,并用#号分隔,OFS变量表示print打印的时候的指定分隔符

awk -F ‘:’ ‘{OFS="#"} {if ($3>1000) {print $1,$2,$3,$4}}’ test.txt

NR变量表示行

NF变量表示段

显示所有行的行号

awk -F ‘:’ ‘{print NR":"$0}’ test.txt

在这里插入图片描述

显示所有行分别有多少段

awk -F ‘:’ ‘{print NF":"$0}’ test.txt
在这里插入图片描述
-

过滤出小于等于10行并且第一段带有root或者sync的行

awk -F ‘:’ ‘NR<=10 && $1 ~ /root|sync/’ test.txt

在这里插入图片描述

N R 表 示 一 共 有 多 少 段 , NR表示一共有多少段, NRNF表示$7

awk -F ‘:’ ‘{print N R &quot; : &quot; NR&quot;:&quot; NR":"NF}’ test.txt
在这里插入图片描述

过滤出前三行,并把第一段赋值成root,’$1=“root”‘表示给第一段赋值,’$1==“root”'表示第一段等于root

head -n 3 test.txt |awk -F ‘:’ ‘$1=“root”’

在这里插入图片描述

算出第三段所有的和

awk -F ‘:’ ‘{(tot=tot+$3)}; END {print tot}’ test.txt在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值