Linux 文本处理工具 - awk

Linux 文本处理工具 - awk


简介


工作原理

  • AWK 工作流程可分为三个部分:

    • 读输入文件之前执行的代码段(由BEGIN关键字标识)。
    • 主循环执行输入文件的代码段。
    • 读输入文件之后的代码段(由END关键字标识)。
  • 命令结构

    • awk 'BEGIN{ commands } pattern { commands } END{ commands }'
    • [注释]: 个人通俗的将 ’ pattern ’ 理解为条件,即符合条件才执行 ’ pattern ’ 后的 ’ commands '
  • 工作原理参考文章:https://www.runoob.com/w3cnote/awk-work-principle.html


常用参数

参数说明
-F指定分隔符

内建变量

变量说明
$n当前记录的第n个字段,字段间由FS分隔 (相当于 n 列)
$0全部列
&1第一列
NR已经读出的记录数,就是行号,从1开始 (即 行数)
NF一条记录的字段的数目 (即 一行的列数)
FILENAME当前文件名
FS字段分隔符(默认是任何空格)
linuxlinux 变量值
“linux”linux 字符串

运算符

符号说明
~
!~不是
&&逻辑与
||逻辑或
in数组成员

【注释】:以上运算符,只是个人觉得常用运算符,并不是全部。


实例

  • 测试文件
[root@ awk]# cat file 
root/root/0/0
linux/linux/1
test/test/2/2/2/2
centos/centos/3/3
[root@ awk]# 
  • 打印行数
[root@ awk]# awk '{print NR}' file  
1
2
3
4
[root@ awk]# 
  • 在文件内容前添加行号
[root@ awk]# awk '{print NR" "$0}' file 
1 root/root/0/0
2 linux/linux/1
3 test/test/2/2/2/2
4 centos/centos/3/3
[root@ awk]# 
  • 打印每行列数,以 ’ / ’ 为分隔符。
[root@ awk]# awk -F / '{print NF}' file 
4
3
6
4
[root@ awk]# 
  • 打印每行第一列,以 ’ / ’ 为分隔符。
[root@ awk]# awk -F / '{print $1}' file 
root
linux
test
centos
[root@ awk]# 
  • 分隔符为 ’ / ',第一列为 " root " 开头,打印符合条件行的第一列。
[root@ awk]# awk -F / '$1~/^root/{print $1}' file 
root
[root@ awk]# 
  • 分隔符为 ’ : ',第六列含 " home " ,并且行是以 " bash " 结尾,打印符合条件的行。
[root@ awk]# awk -F : '$6!~/home/&&/bash$/{print}' /etc/passwd 
root:x:0:0:root:/root:/bin/bash
[root@ awk]# 
  • 分隔符为 ’ : ',第五列为空,打印符合条件的行。
[root@ awk]# awk -F : '$5~/^$/{print}' passwd
haha:x:1005:1005::/home/haha:/bin/nologin
[root@ awk]# 
  • 统计在系统中能 su 切换的用户。
  • 分隔符为 ’ : ',自定义变量 ’ N ',第六列以 ’ /home ’ 开头,并且行以 " /bash " 结尾 或者 以 " /sh " 结尾的行,符合条件 N 加 1,打印 N 的值。
[root@ awk]# awk -F : 'BEGIN{N=0} $6~/^\/home/ && /\/bash$/||/\/sh$/{N++} END{print N}' /etc/passwd
1
[root@ awk]#



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值