Linux文本处理工具AWK使用解析

      在linux系统上有三大文本处理工具分别是:grep,sed,awk,这次主要来看看awk。

awk  option  ‘pattern'  file

-F    指定分隔符;

-v     申明自定义变量;

查看当前系统上,用户名和用户shell,输出分隔符为~.

# awk -F: 'BEGIN{OFS="~";print "UserName   Shell"}{print $1,$7}END{print "================end============="}' /etc/passwd

Linux文本处理工具AWK使用解析

还可以在中间加入模式(pattern),指定只对以in字符结尾的行做处理。

# awk -F: 'BEGIN{OFS="~";print "UserName   Shell"}/in$/{print $1,$7}END{print "================end============="}' /etc/passwd

Linux文本处理工具AWK使用解析

显示当前系统上id号小于等于500的用户。(表达式匹配)

# awk -F: '$3<=500{print $1,$3}' /etc/passwd

Linux文本处理工具AWK使用解析

显示当前系统上shell是/bin/bash的用户(模式匹配)

# awk -F: 'BEGIN{OFS=":";print "UserName  Shell"}$7~/bash/{print $1,$7}' /etc/passwd

Linux文本处理工具AWK使用解析

控制语句:

判断用户ID是否为0,如果是就输出用户名并说明是一个管理员用户,如果不是输出用户名,说明是一个普通用户。

# awk -F: '{if ($3==0) {print $1,"Administrator";} else {print  $1,"Common User"}}' /etc/passwd

Linux文本处理工具AWK使用解析

统计下系统上有多少个id号大于500的用户

# awk -F: -v Sum=0 '{if ($3>=500) Sum++}END{print Sum}' /etc/passwd

Linux文本处理工具AWK使用解析

显示number.txt文件中,所以大于100的数值。

# awk  '{i=1;while (i<=NF) {if ($i>=100) print $i;i++}}' number.txt

Linux文本处理工具AWK使用解析

do-while    至少执行一次循环体,不管条件满足与否。

# awk -F: '{i=4;do {print $i;i--}while (i>4)}' /etc/passwd

Linux文本处理工具AWK使用解析

遍历/etc/passwd  $1-$3数值,只输出字符数大于4的数据。

# awk -F: '{for(i=1;i<=3;i++){if (length($i)>=4){print $i}}}' /etc/passwd

Linux文本处理工具AWK使用解析

使用for显示number.txt文件中,所以大于100的数值。

# awk '{for (i=1;i<=NF;i++){if ($i>=100) {print $i}}}' number.txt

Linux文本处理工具AWK使用解析

查看网络连接各个状态的次数

# netstat -tan | awk '/^tcp/{state[$NF]++}END{for ( S in state) print S,state[S]}'

Linux文本处理工具AWK使用解析

统计日志每个ip访问了多少次

# awk '{ip[$1]++}END{for ( A  in ip ) print  A,ip[A]}'  access_log

统计当前系统用户,每种shell各有多少个。

# awk -F: '{count[$NF]++}END{for (A in count )print A,count[A]}' /etc/passwd

Linux文本处理工具AWK使用解析

awk的内置函数

split        将数据按分隔符切片保存至数组里

length     返回字符串的字符个数

查看当前每个IP连接,与连接次数。

# netstat -tan | awk '/:80/{split($5,client,":");IP[client[4]]++}END{for (A in IP) print A,IP[A]}'

Linux文本处理工具AWK使用解析

就是数组和split函数这里难了

OK完成了

 


本文转自qw87112 51CTO博客,原文链接:http://blog.51cto.com/tchuairen/1429894


上一篇:Python的缩进问题unindent does not match any outer indentation level


下一篇:烂泥:nginx负载均衡