awk概述

awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人,分别是Alfred Aho、Brian Kernighan、Peter Weinberger。gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。下面介绍的awk是以GUN的gawk为例的,在linux系统中已把awk链接到gawk,所以下面全部以awk进行介绍。

使用语法

awk [ -F Ere ] [ -v Assignment ] … { -f ProgramFile | 'Program' } [ [ File … | Assignment … ] ] …

常用命令选项

-F fs or --field-separator fs

指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。

-v var=value or --asign var=value

赋值一个用户定义变量。

-f scripfile or --file scriptfile

从脚本文件中读取awk命令。

相关输出命令

print item1,item2,…

要点:

逗号作为item的分隔符

输出的item可是字符串,也可以是数值:当前记录的字段、变量或awk的表达式

如省略item,相当于print $0

printf FORMAT,item1,item2,….

要点:

FORMAT是必须要给出的

不会自动换行,需要显示给出换行控制符 \n

FORMAT中需要分别为后面的每个item指定一个格式化符号

相关格式符

格式符

描述

%c

显示字符的ASCII码

%d,%i

显示十进制整数

%e,%E

科学计数法数值显示

%f

显示为浮点数

%g,%G

以科学计数法或浮点形式显示数值

%s

显示字符串

%u

无符号整数

%%

显示%自身

相关修饰符

修饰符

描述

m[.n]

m表示控制显示的宽度,默认右对齐;n表示小数点后的精度

左对齐

+

显示数值的符号

相关内建变量

变量名

描述

FS

input field seperator ,指定输入分隔符,默认为空白字符

OFS

output field seperator,指定输出分隔符,默认为空白字符

RS

input record seperator,指定输入行分隔符

ORS

output record seperator,指定输出行分隔符

NF

number of field,字段数量

{print NF}

打印统计的字段数量

{print $NF}

打印每行的最后一字段

NR

number of record,行数

FNR

多文件统计,各文件分别计数,显示行数

FILENAME

当前文件名

ARGC

命令行参数的个数

ARGV

命令行中给定的各参数

相关内置函数

函数表达式

描述

rand()

返回0-1之间的随机数,小数

length([$])

返回指定字符串的长度

sub(r,s,[t])

以r表示的模式来查找t所表示的字符串中的匹配的内容,并将其第一次出现替换为s所表示的内容

gsub(r,s,[t])

以r表示的模式来查找t所表示的字符串中的匹配的内容,并将其所有出现全部替换为s所表示的内容

split(s,a[,r])

以r为分隔符切割字符s,并将切割后的结果保存在a所表示的数组中

相关操作符

运算符

描述

= += -= *= /= %= ^= **=

赋值

?:

C条件表达式

||

逻辑或

&&

逻辑与

~

匹配正则表达式

~!

不匹配正则表达式

< <= > >= != ==

关系运算符

空格

连接

+ –

加,减

* / &

乘,除与求余

+ – !

一元加,减和逻辑非

^ ***

求幂

++ –

增加或减少,作为前缀或后缀

$

字段引用

in

数组成员

相关模式

模式

描述

empty

空模式,匹配每一行

BEGIN{}

仅在开始处理文件中的文本之前执行一次

END{}

仅在文本处理完成之后执行一次

/regular expression/

仅处理能够被此处模式匹配到的行

relational expression

关系表达式,结果有"真"有"假",结果为"真"才会被处理,真:结果为非0值,非空字符串

line ranges

行范围,startline,endline:/pat1/,/pat2/或(NR>=startline&&NR<=endline)

相关控制语句及示例

if(condition) statements

找出系统上UID大于等于1000的用户,并将用户输出形式类似于“Conmon user: gwx”

awk -F: '{if ($3>=1000) printf "Common user: %s\n",$1}' /etc/passwd

找出系统上默认shell为/bin/bash的用户,并输出该用户的用户名

awk -F: '{if ($NF == "/bin/bash")print $1}' /etc/passwd

找出系统上默认shell为bash的用户,并输出该用户的用户名

awk -F: '{if ($NF~"bash$")print $1}' /etc/passwd

输出当前系统上fstab挂载的设备情况

awk  '{if ($1!="#")print $0}' /etc/fstab

输出当前系统使用比例超过80%的分区

df -h |awk -F% '/\/dev/{print $1}'|awk '{if ($NF>80)print $1}'

if(condition){statements} else {statements}

找出系统上UID大于等于1000的用户,并将用户输出形式类似于“Conmon user: gwx”,其余用户输出形式类似于“Sysuser:php”

awk -F: '{if ($3>=1000) {printf "Common user: %s\n",$1} else {printf "Sysuser: %s\n",$1}}' /etc/passwd

while (condition){statements}

输出当前系统/etc/grub2.cfg文件中以linux16开头的行的字符数大于等于7个的字段,并在字段的后面显示该字段的字符数

awk '/^[[:space:]]*linux16/{i=1;while (i<=NF){if (length($i)>=7){print $i,length($i)};i++}}' /etc/grub2.cfg

for(expr1;expr2;expr3){statements}

输出当前系统/etc/grub2.cfg文件中以linux16开头的行字段,并在字段的后面显示该字段的字符数

awk '/^[[:space:]]*linux16/{for (i=1;i<=NF;i++){print $i,length($i)}}' /etc/grub2.cfg

相关扩展 针对与使用awk统计网站访问相关

日志字段定义样例如下,如果日志文件做了轮替设置,请查看对应要统计的日志文件做统计分析

10.6.9.15 – – [12/Nov/2016:16:24:15 +0800] "GET / HTTP/1.1" 200 258 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36"

统计访问频次最高的5个ip

cat /var/log/httpd/access_log |awk '{print $1}'|sort|uniq -c|sort -nr|head -5

统计恶意ip

cat /var/log/httpd/access_log|awk '{if($9~/40/){print $1}}'|sort|uniq|sort -nr

找出访问最多的文件(下载类网站常用,这里以.exe扩展名举例)

cat /var/log/httpd/access_log|awk '($7 ~/.exe/){print $10 "" $1 "" $4""$7}' |sort -n |uniq -c |sort -nr |head -10

统计该网站的流量,统计结果以“G“”显示

cat /var/log/httpd/access_log|awk '{sum+=$10} END {print sum/1024/1024/1024"G"}'

查看日志中出现100次以上的IP

cat /var/log/httpd/access_log-20161113|cut -d ' ' -f 1 |sort |uniq -c | awk '{if ($1 > 100) print $0}'

查看某一IP在网站内都访问了哪些资源

cat /var/log/httpd/access_log-20161113| grep 10.6.9.15| awk '{print $1"\t"$7}' | sort | uniq -c | sort -nr | less

原创文章,作者:N24-wenxuan,如若转载,请注明出处:http://www.178linux.com/62423

linux awk入门,awk入门应用相关推荐

  1. Linux 应用程序开发入门

    Linux 应用程序开发入门 Neo Chen (netkiller) <openunix@163.com> 版权 © 2011, 2012 http://netkiller.github ...

  2. Linux运维工程师入门第一课-赵永刚-专题视频课程

    Linux运维工程师入门第一课-75人已学习 课程介绍         本课程包含许多工作中会遇到的问题及解决方案,解决大家工作当中遇到的问题.非常适合刚刚入门的同学来学习linux基础入门. 本课程 ...

  3. 「Linux」Linux Shell 编程基础入门

    Linux Shell 编程基础入门 1. 变量 1.1 变量定义 1.2 使用变量 1.3 引号 1.4 将命令的结果赋值给变量 1.5 位置参数 1.6 特殊变量及其含义 2. 字符串 2.1 字 ...

  4. Linux 岗位介绍及入门

    14天学习训练营导师课程: 互联网老辛< 符合学习规律的超详细linux实战快速入门> 学习一直在路上,14天打卡学习第 1 天内容记录 Linux 岗位介绍及入门 文章目录 1.运维学习 ...

  5. linux三个冒号加端口,不看绝对后悔的Linux三剑客之awk实战精讲

    一.Linux三剑客之awk命令精讲 第1章 awk基础入门 1.1 awk简介awk不仅仅时linux系统中的一个命令,而且是一种编程语言,可以用来处理数据和生成报告(excel).处理的数据可以是 ...

  6. linux shell sed awk 命令(2)-awk

    linux shell sed awk 命令(2)-awk awk语法格式: awk [选项] -f program-file [ -- ] file ... 选项: -F fs, --field-s ...

  7. Linux三剑客之awk详解

    第一篇 awk简介与表达式实例 一种名字怪异的语言 模式扫描和处理,处理数据和生成报告. awk不仅仅是linux系统中的一个命令,而且是一种编程语言:它可以用来处理数据和生成报告(excel):处理 ...

  8. Linux大棚版redis入门教程

    后端开发过程中,有时需要考虑系统的实时性,那么缓存系统就派上用场了,当然,现在最常用的当属Redis,这篇文章转自 Linux大棚版redis入门教程 [本教程目录] redis是什么 redis的作 ...

  9. 20165301 预备作业三:Linux安装及命令入门

    预备作业三:Linux安装及命令入门 VirtualBox虚拟机的安装 在进行安装之前,原本以为有了娄老师的安装教程会是一件很容易的事情.万万没想到,在自己实际动手操作中,还是遇到了许多困难.通过与同 ...

最新文章

  1. webpack 独立打包 css 文件
  2. CF1063A Oh Those Palindromes
  3. PCI_Express规范第七章解读-Software Initialization and configuration
  4. AcWing1069.凸多边形的划分(区间DP)题解
  5. 工资计算问题,类似计算某天是一年中的第几天的问题
  6. TotalFinder for Mac(Finder增强工具)v1.14.1
  7. Influx kafka
  8. think in uml 2.1
  9. Mac效率:配置Alfred web search
  10. 人工智能写作:想要和智能对话 本AI给你的写作指个路
  11. 医疗his系统的优势
  12. 【知识点】patch补丁文件格式
  13. 如何删除XP系统的NETWARE,改变登陆界面 火急!!XP系统登录界面由于netware造成的不能更改...
  14. listbox java_listbox读取数据库
  15. 手机内存卡RAW无法格式化的解决办法
  16. 读书笔记:“Python Programming: An Introduction to Computer Science”
  17. 小程序开发学习一:开发语言解析
  18. 2021-08-23-Nginx安装与部署项目
  19. mapbox,使用maptalks绘制3D建筑图形
  20. 输入两个数,进行四则运算

热门文章

  1. 提升普适性,阿里云官方SDK发布支持Go语言SDK
  2. 老码农90%的程序员都是瞎努力!这份路线教你成为高手
  3. 由一次磁盘告警引发的“血案”——你知道 du 和 ls 区别吗?
  4. 强封锁之后,华为正寻求10亿美元贷款;苹果发布iOS 12.3.1正式版,出击垃圾短信;联想CFO为“联想搬出中国”言论道歉;...
  5. 倒计时 2 天,2018 中国大数据技术大会(BDTC)报名通道即将关闭(附参会提醒)...
  6. app获取个人信息是否合法_重拳出击!42款APP过度收集用户信息被点名
  7. 职称计算机Word2003是考什么,2017年职称计算机考试word2003考点
  8. qtextedit 默认文案_QTextEdit的paste
  9. 使用javax.mail发送邮件
  10. Mybatis-plus批量插入、批量修改数据saveBatch等速度缓慢