Linux中的awk命令

awk应用

统计、制表

awk处理方式

awk一次处理一行内容
awk可以对每行进行切片处理

awk格式

命令行格式
awk [options] 'command' file(s)
脚本格式
awk -f awk-script-file file(s)

command:pattern {awk操作命令}
pattern:正则表达式;逻辑判断式
操作命令:
内置函数:print();printf();getline;
控制指令:if(){...}else{...};while(){...}

awk内置参数的应用

awk内置变量
$0 整个当前行
$1 每行第一个字段
$2 每行第二个字段
.......

awk内置参数:分隔符
options:-F field-separator(默认为空格)
例:
1、将passwd文件中按照:分隔开来的第三个字段打印出来
awk -F ':' '{print $3}' passwd
2、将passwd文件中按照:分隔开来的第一个和第三个字段打印出来
awk -F ':' '{print "User:"$1"\t ""Uid:"$3}' passwd

内置变量:
NR:每行的记录号
NF:字段数量变量
FILENAME:正在处理的文件名

例:
1、打印passwd中uid大于100的行号和用户名
awk -F ':' '{if ($3>100)' print NR,$1} passwd
2、将log日志中的Error行的日期打印出来

示例日志fresh.log

sed '/Error/p' fresh.log | awk '{print $1}'
awk '/Error/{print $1}' fresh.log

awk逻辑
~,!~:匹配正则表达式
==,!=,<,>:判断逻辑表达式

例:
1、将passwd中按照:分隔开的第一个字段中首字母以m开头的字段打印出来
awk -F ':' '$1~/^m.*/{print $1}' passwd
2、将passwd中按照:分隔开的行中uid大于100的第一个和第三个字段打印出来
awk -F ':' '$3>100{print $1,$3}' passwd

awk扩展
command2扩展
BEGIN {print 'start'} pattern {commands} EDN {print 'end'}
例:
1、制表显示/etc/passwd每行的行号,每行的列数,对应行的用户名
awk -F ':' 'BEGIN {print "Line Col User"} {print NR,NF,$1} END {print "------FILENAME-------"}' passwd

案例
1、统计当前文件夹下的文件/文件夹占用大小
ls -l | awk 'BEGIN{size=0}{size+=$5}END{print "size is " size/1024/1024"M"}'
2、统计显示/etc/passwd的账户总人数
awk -F ':' 'BEGIN{count=0}$1!~/^$/{count++}END{print " count =" count}' passwd
3、统计passwd文件中uid大于100的用户
awk -F ':' 'BEGIN{count=0}{if ($3>100) name[count++]=$1} END{for (i=0;i
4、统计netstat -anp 状态下为LISTEN和CONNECTED的连接数量
netstat -anp | awk '$6~/LISTEN|CONNECTED/{sum[$6]++}END{for (i in sum) print i,sum[i]}'

awk和sed的区别

awk和sed都可以处理文本
awk侧重复杂逻辑处理
sed侧重正则处理

Linux中的awk命令_第1张图片
总结

你可能感兴趣的:(Linux中的awk命令)