Linux中的awk命令

本文详细介绍了awk命令的语法、内置变量、操作符号以及正则表达式,包括如何处理文本字段、进行数学和逻辑运算。通过示例展示了在处理/Linux/etc/passwd文件和access.log日志时的应用,如统计特定用户、筛选特定条件的行和字段。awk的强大功能在于其灵活的数据处理能力和在文本分析中的高效应用。
摘要由CSDN通过智能技术生成

1.awk是Linux里面的一个文本处理命令(工具)–》程序

awk完整语法

#ENGIN{commands}: 处理数据前执行的命令
#//: 匹配代码块,可以是字符串或者正则表达式
#{commands}: 每行都执行的命令
#END{commands}: 处理数据后执行的命令
#file:指定路径的文件
awk 'BEGIN{commands}//{commands}END{commands}' file

awk的数据字段变量

$0表示整行文本
$1表示文本中第1个数据字段
$2表示文本中第2个数据字段
$n表示文本中第n个数据字段

awk用-F来指定分隔符,默认的字段分割符为空白字符(空格或TAB)

# 以:为分隔符截取/etc/passwd里的第一个字段
awk -F: '{print $1}' /etc/passwd	

awk命令的操作符号

  • 正则表达式
# 输出/etc/passwd下的不是以字母开头的$1
awk -F: '/^[^a-zA-Z]/{print $1}' /etc/passwd
  • 数学运算: + - * / % ++ –
# 使用awk命令统计以r开头的用户数目
cat /etc/passwd |awk -F: 'BEGIN{i=0}/^r/{print $1;i++}END{print i}'	
  • 逻辑关系: && ||
# 截取出/etc/passwd中$3大于1000或者$3小于100的$1和$3字段
cat /etc/passwd | awk -F":" '$3>1000 ||$3<100{print $1,$3}'

# 截取出/etc/passwd中$3大于50并且$3小于100的$1和$3字段
cat /etc/passwd | awk -F":" '$3>50 && $3<100{print $1 ,$3}'
  • 比较操作符: > < >= != <= == ~ !~( ==为精确匹配 ~为模糊匹配)
# 截取出/etc/passwd下第三个字段是三个字符的$1和$3(一个.代表一个字符串 .{3}代表3个字符)
 awk -F: '$3~/\<.{3}\>/ {print $1,$3}' /etc/passwd

awk命令的内置变量

  • NR代表当前处理行号
# 输出passwd下行号为5的行和行号
cat /etc/passwd |awk  'NR==5{print NR,$0}'
  • NF 为处理行的最后一个字段
# 输出passwd下以:为分隔符每行的最后一个字段
cat /etc/passwd |awk -F: '{print $NF}'
  • FS 当前的输入分隔符,默认是空白字符(field separator),OFS 当前的输出分割符,默认为空格字符(output field separator)
# 将passwd里面的输入分割符号:变为输出分割符# 
cat /etc/passwd|awk 'FS=":";OFS="#"{print NR,$0,$NF}' 

awk命令的结构化语句if/else

#案例:/etc/passwd下$3是uid 用户的编号,如果用户的编号是0  --》管理员,1~999  --》程序用户,大于1000  ---》普通用户,最后统计出有多少管理员,多少程序用户,多少普通用户
cat /etc/passwd |awk -F: 'BEGIN{a=b=c=0}{if($3==0){a++;print $1}else if($3>0&&$3<=999){b++;print $1}else {c++;print $1}}END{print "管理员个数:"a" 程序用户个数:"b " 普通用户个数:"c}'
# 统计access.log里状态码的情况
awk 'BEGIN{a=b=c=d=0}{if($9>=200&&$9<300){a++}else if($9>=300&&$9<400){b++}else if($9>=400&&$9<500){c++}else{d++}}END{print "2xx:"a,"3xx:"b,"4xx:"c,"5xx:"d}' access.log
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值