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

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

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

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

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

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

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

控制语句:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

统计日志每个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

awk的内置函数

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

length     返回字符串的字符个数

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

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

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

OK完成了

 

本文出自 “坏人的博客” 博客,转载请与作者联系!

Linux文本处理工具AWK使用解析,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。