第14章 使用awk处理文本

本文介绍了awk的工作原理,展示了如何使用awk处理文本,包括提取特定行、格式化输出、使用变量、控制语句和函数。通过多个案例,如处理passwd文件、统计文件行数、打印偶数行等,深入解析awk在文本处理中的应用。
摘要由CSDN通过智能技术生成

1.     awk如何工作

awk和流编辑器sed在工作原理和用法上有很多类似之处,它们都是检查输入数据中的行是否匹配指定的模式,如果匹配成功就对匹配的行执行相应的操作,重复这个过程指导所有的输入数据都被处理完,因此awk和sed都是面向数据流的工具。此外,awk和sed的相似之处还体现在两者使用的语法式很类似,都是使用正则表达式匹配来确定要操作的行。与sed不同的是,awk执行的操作要写在模式后面的花括号{}中。

 

案例1:显示出系统中某个特定用户(如root用户)的用户名、用户ID以及主目录。

#提取passwd文件中某一行的三个字段

$awk –F: ‘/^root:/{print $1,$3,$6;}’/etc/passwd

root 0 /root

解析:/etc/passwd文件的各个字段是由冒号隔开,而awk的默认分隔符是空格,所以通过命令行选项-F:来指定;$1,$3,$6是指第一、三、六字段;

 

案例2:输出系统中所有用户的用户名及相应的用户ID的表格,并在表格的第一行为这两列数据添加标题。

具体代码实现如下[user.awk]:

#在主循环开始以前打印标题,使下面的数据的含义更加明确

print title to clarify the following databefore main loop begin

BEGIN {

   printf "%-15s%s\n","USERNAME","UID";

         printf"--------------\n";

}

 

#主循环开始运行

#从/etc/passwd文件中提取用户名和UID

{

   printf "%-15s%s\n",$1,$3;

}

#通过选项-f指定要运行的awk程序

$awk –F: -f user.awk  /etc/passwd

 

案例3:如何显示出当前系统中所有用户ID大于等于1000的用户?

#使用比较表达式,而不是模式匹配

$awk –F: ‘$3>=1000{ printf “User:%-15sUID:%s\n”,$1,$3;}’ /etc/passwd

 

格式:

expression { actions; }

 

当有多高表达式时,使用逻辑与&&和逻辑或||把多个表达式连接在一起构成更复杂的表达式,如搜索当前系统中所有使用bash和C Shell的用户:

$awk –F: ‘($7==”/bin/bash”)|| ($7==”/bin/csh”) { printf “User:%-15sUID:%-15sShell:%s\n”,$1,$3,$7; }’/etc/passwd

 

案例4:

2.     使用变量

awk 程序中的变

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值