linux命令-awk

1、awk内容介绍

文本与数据处理工具
可编程》处理灵活、功能强大
统计
制表

2、awk行处理方式与格式

1、awk处理方式:
	1)、awk一次处理一行内容
	2)、awk对每行可以切片处理’
2、awk与格式:
1)、命令行格式:$awk [options] 'command' file(s)
	基本格式:$awk [options] 'command' file(s)
		command:pattern {awk操作命令}	备注:pattern可以是正则表达式、也可以是逻辑表达式
		操作命令:内置函数:print() printf() getline..;
				 控制指令:if(){...}else{...};while(){...};
	扩展格式:
2)、 脚本格式:$awk -f awk-script-file file(s)

3.1、awk内置参数使用

awk 内置变量1
	$0:表示整个当前行
	$1:表示每行第一个字段
	$2:表示每行第二个字段
awk内置参数:分隔符
	optios:-F field-separator(默认为空格)
	例子:打印passwd以':'分隔后的第一个字段	$ awk -F ':' '{print $1}' passwd
	例子:打印passwd以':'分隔后的第一、第三个字段	$ awk -F ':' '{print $1,$3}' passwd
awk内置变量2
	NR:每行的记录号
	NF:字段数量变量
	FILENAME:正在处理的文件名
	例子:打印行记录号、字段数量、文件名	awk -F ':' '{print NR,NF,FILENAME}' passwd

3.2、awk内置参数使用案例

案例一:打印文件的每行对应的用户名、每行行号、每行的列数,并且以制表符\t区分(使用print、printf函数)
		awk -F ':' '{print $1"\t"NR"\t"NF}' passwd
		awk -F ':' '{printf("user:%s\tline:%s\tclo:%s\n",$1,NR,NF)}' passwd
案例二:打印文件中用户ID大于200的行号和用户名
		awk -F ':' '{if ($3>200){print NR,$1}}' passwd
案例三:在服务器日志中log中找出'Error'的发生日期
		awk '/Error/{print $1}' log

4、awk逻辑判断式

~,!~:匹配正则表达式
	例子:匹配字母m开头的用户并打印用户名
		awk -F ':' '$1~/^m.*/{print $1}' passwd
	例子:排除字母m开头的用户并打印用户名
		awk -F ':' '$1!~/^m.*/{print $1}' passwd
		
==,!=,<,>:判断逻辑表达式
	例子:打印文件中用户ID大于200的行号和用户名
		awk -F ':' '$3>200{print NR,$1}' passwd
	例子:打印行号不等于200的行号和用户名
		awk -F ':' 'NR!=200{print NR,$1}' passwd

5、awk扩展格式

格式:$awk [options] 'BEGIN {print "start"} pattern {command} END {print "end"}' file(s)
	即:在行处理开始前执行BEGIN后大括号{}的内容,执行完command后执行END 后大括号{}的内容。可以理解为BEGIN后的大括号为初始化的内容,END后的大括号为收尾工作,即不参与pattern {command}的行处理。
	awk -F ':' 'BEGIN{print "行号\t用户名"} $1~/^m.*/{print NR"\t"$1} END{print "================================"}' passwd

6、awk逻辑处理案例

案例一:统计当前文件夹下的文件/文件夹占用的大小
	ls -l|awk 'BEGIN {size=0} {size+=$5} END{print "当前文件夹的大小是:"size/1024"k"}'
案例二:统计显示passwd的账户总人数
	awk -F ':' 'BEGIN{count=0} $1!~/^$/{count++} END{print "用户数总共为:"count}' passwd
案例三:统计显示UID大于100的用户名
	方法一:awk -F ':' '$3>100{print NR"\t1"$1}' passwd
	方法二:awk -F ':' 'BEGIN{count=0} {if ($3>100) name[count++]=$1} END{for (i=0;i<count;i++) print i"\t"name[i]}' passwd
案例三:统计netstat -anp状态下为LISTEN和CONNECTED的连接数量
	netstat -anp| awk '$6~/CONNECTED|LISTENING/{sum[$6]++} END{for (i in sum) print i"\t"sum[i]}'

7、sed、awk比较

awk和sed皆为文本处理工具
awk侧重于处理复杂逻辑,因为awk可以进行编程
sed更加的侧重于正则的处理
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值