Linux三剑客——awk

Linux三剑客——awk

DKing~共享

1.1 awk执行过程

awk读入第一行内容

判断是否符合模式中的条件NR>=2(是否让你进入大门)

如果匹配则执行对应的动作{print $0}

如果不匹配条件,继续读取下一行

继续读取下一行

重复以上过程,直到读取到最后一行(EOF:end of field)

1.2 记录和字段

record    表示记录、行           记录相当于行

field       表示区域、字段       字段相当于列

1.2.1 记录(行)

awk默认情况下每一行都是一个记录(record)

RS(record separator)是输入数据记录分隔符,表示每个记录输入的时候的分隔符,即行与行之间如何分隔,即RS表示每行的结束标志

NR(number of record)记录行号,表示当前正在处理的记录(行)的号码,读取新行时候会自动+1

ORS(output record separator)输出记录分隔符

awk使用内置变量RS来存放输入记录分隔符,RS表示的是输入的记录分隔符,可通过BEGIN模块重新定义

1.2.2 字段(列)

每条记录都是由多个区域(field)组成的,默认情况下区域之间的分隔符是由空格来分隔,并且将分隔符记录在内置变量FS中,每行记录的区域数保存在awk的内置变量NF中

FS(field separator)输入字段(列)分隔符,分隔符就是菜刀,把一行字符串切割成多个区域

awk -F   实际上就是修改FS的内容,相当于 awk 'BEGIN{FS=":"}'

NF(number of fields)表示一行中字段(列)的个数,即每行有多少列

OFS输出字段(列)分隔符

$符号表示取某个列,$1 $2 $NF

通过RS、FS决定awk如何读取数据,还可以修改ORS、OFS的值指定awk如何输出数据,下图示例:

1.3 awk新增的参数和符号

~            表示匹配,包含

!~           表示不匹配,不包含

gsub       函数,用于替换

gsub       (/你要找什么/,“替换成什么”,第几列)

i=i+1      等同于i++   统计次数

i=i+$n    i+=$n     累加总和

-v var=value   赋值一个用户定义变量,将外部变量传递给awk

1.3.1 gsub的替换功能

# awk '{gsub(/:/,"¥",$NF);print}' reg.txt

Zhang Dandan 41117397 ¥250¥100¥175

Zhang Xiaoyu 390320151 ¥155¥90¥201

gsub函数

gsub(/你要找什么/,“替换成什么”,第几列)

1.3.2 i++统计次数

# seq 10 |awk '{i=i+1;print i}'         统计次数并显示过程

# seq 10 |awk '{i=i+1}END{print i}'     统计次数只显示最终结果

i=i+1可用i++表示

# seq 10 |awk '{i=i+$1}END{print i}'    计算第1列次数总和

# seq 10 |awk '{i+=$n}END{print i}'     i+=$n等同于i=i+$n

1.4 awk模式与动作

awk        [ options ]     'pattern {action}'        file

awk参数     模式动作

通俗讲就是给定条件然后去做什么,awk ‘找谁{干啥}’‘模式{动作}’

awk的常用模式:

正则表达式作为模式      支持BRE ERE

比较表达式作为模式      NR>10

范围模式

特殊模式BEGIN和END

1.4.1 正则表达式作为模式:

实例1-1  从具体某一列中查找内容

# awk '$3~/0+/' /server/files/reg.txt

Zhang Xiaoyu    390320151  :155:90:201

实例1-2  $(NF-1)与$NF-1的区别

# awk -F '[: ]+' '/Zhang/{print $1,$2,$(NF-1)}' reg.txt

Zhang Dandan 100

Zhang Xiaoyu 90

# awk -F '[: ]+' '/Zhang/{print $1,$2,$NF-1}' reg.txt

Zhang Dandan 174

Zhang Xiaoyu 200

1.4.2 范围模式

范围模式简单理解就是从哪里来,到哪里去

匹配从条件1开始到条件2介绍的范围

# awk 'NR==1,NR==3' reg.txt

Zhang Dandan    41117397   :250:100:175

Zhang Xiaoyu    390320151  :155:90:201

Meng  Feixue    80042789   :250:60:50

1.5 awk数组

以数字做索引,方便快捷查询内容,数组索引可以是数字和字符串。在awk中数组叫做关联数组(associative arrays)。awk 中的数组不必提前声明,也不必声明大小。数组元素用0或空字符串来初始化,这根据上下文而定。

# awk 'BEGIN{h[1]="dou";h[2]="qin";h[3]="feng";print h[1],h[2],h[3]}'

dou qin feng

1.5.1 分析用户登录日志

找出攻击者ip地址和攻击次数

#  awk '$6~/Failed/{h[$(NF-3)]++}END{for( pol in h ) print pol,h[pol]}' secure-20161219 |sort -nk2|column -t|tail

找出被攻击用户和攻击次数

#  awk '$6~/Failed/{h[$(NF-5)]++}END{for( pol in h ) print pol,h[pol]}' secure-20161219 |sort -nk2|column -t|tail

1.5.2 排序命令小结

1.5.3 sort

sort    将文件进行排序

-b:忽略每行前面开始出的空格字符;

-c:检查文件是否已经按照顺序排序;

-d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;

-f:排序时,将小写字母视为大写字母;

-n:依照数值的大小排序;

-o<输出文件>:将排序后的结果存入制定的文件;

-r:以相反的顺序来排序;

1.5.4 uniq

uniq   用于报告或忽略文件中的重复行,一般与sort命令结合使用

-c或——count:在每列旁边显示该行重复出现的次数;

-d或--repeated:仅显示重复出现的行列;

-u或——unique:仅显示出现一次的行列;

1.5.5 column

column  纵向列表

-t          以空格为标杆自动对齐

原文地址:http://blog.51cto.com/13520758/2060335

时间: 2024-10-01 03:45:53

Linux三剑客——awk的相关文章

Linux 三剑客 -- awk sed grep

顶配awk,中配sed,标配grep 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件等等.如果我们相对这些文件进行一些编辑查询等操作时,我们可能会想到一些vi,vim,cat,more等命令.但是这些命令效率不高,这就好比一块空地准备搭建房子,请了10个师傅拿着铁锹挖地基,花了一个月的时间才挖完,而另外一块空地则请了个挖土机,三下五除二就搞定了,这就是效率.而在linux中的"挖土机"有三种型号:顶配awk,中配sed,标配grep.使用这些工具,我们能够在达到

Linux三剑客——awk命令

awk命令 awk命令用于Linux下的文本处理.数据可以来自文件或标准输入,支持正则表达式等功能,是Linux下强大的文本处理工具. 示例 #$1与$3相连输出,不分隔 [[email protected] ~]# awk -F ":" '{print $1 $3}' /etc/passwd #多了一个逗号,$1与$3使用空格分隔 [[email protected] ~]# awk -F ":" '{print $1,$3}' /etc/passwd #显示每行

linux三剑客awk、sed、grep

1.awk主要用来做分列.匹配.计算的工作    2.sed主要用来做替换的(流处理)    3.grep主要用来过滤出需要的文本 awk(默认的分隔符为空格)awk    -F ":"  '/bonzi/{if (NR==2) print  $0}'(一般模式) -F    设置分隔符,可以设置多个分隔符     -F  "[:!]+" NR    表示行号 $NF   表示尾行 NF 当前记录中的字段个数 内置函数 gsub(r,s) 在整个$0中用s代替r g

Linux三剑客awk的应用对比案例详解

awk的格式 一 awk     参数     '条件'(单引号)  文件路径 a.参数我们一般用-F  "[]"  (双引号)   指定分隔符 b.条件  为BEGIN 模块  +  模式{条件}  + END模块 b1.BEGIN模块在执行awk读取文件之前就执行,一般用来定义我们的内置变量,awk必须在输入文件进行任何处理前先执行BEGIN里的动作(action). b2.模式{条件}模式就是我们需要查找的范围.模式可以通过正则表达式模式,比较式模式,范围式模式,特殊的模式即BE

不看绝对后悔的Linux三剑客之awk实战精讲

一.Linux三剑客之awk命令精讲 第1章 awk基础入门 1.1 awk简介 awk不仅仅时linux系统中的一个命令,而且是一种编程语言,可以用来处理数据和生成报告(excel).处理的数据可以是一个或多个文件,可以是来自标准输入,也可以通过管道获取标准输入,awk可以在命令行上直接编辑命令进行操作,也可以编写成awk程序来进行更为复杂的运用.本章主要讲解awk命令的运用 1.2 awk环境简介 [[email protected] ~]# cat /etc/redhat-release 

linux sed&awk详解

sed sed为文本处理三剑客之一.本身就是一个管道命令,可以将文件进行增加,修改,删除,选取等操作. 格式:sed [-nrefi] [command] "文本字符串" 选项: -r: 支持扩展正则表达式: -n: 静默模式:(sed有个模式空间和保持空间,默认sed会将执行的结果保存到模式空间里面,而模式空间默认情况是输出在屏幕上,加了-n,则阻止将模式空间的内容输出到屏幕上) -f:/path/to/script_file:从指定的文件中读取脚本并运行 -e script1 -e

Linux三剑客企业级经典面试题解答实战

Linux三剑客企业级经典面试题解答实战 说明:来自早晨老男孩教育在线班一期同学的面试题和学生给出的答案整理 面试题:请过滤oldboy.log中在device: {}里面出现了多少次oldboy,过滤并统计出来. oldboy is a linuxer. device: { oo oldboy no sql this is log niu niu } oldboy device: { oldboy no sql this is log niu niu } oldboy device: { ol

Linux 三剑客之一--&gt;grep

======================================================================================== * ######------ Linux 正则表达式 ------###### * ######------ 三剑客 grep 文本过滤 ------######*/==============================================================================

Linux三剑客之grep、egrep及正则表达式使用详解

Linux三剑客是Linux中非常强悍的文本处理工具,掌握三剑客,文处理已想必会有三剑在手,天下我有的感觉,三剑客之grep家族擅长文本搜索,支持以正则表达式进行文本搜索,使得grep非常强悍,以下内容就grep,egrep和正则表达式展开 Linux文本工具三剑客:        grep.egrep.fgrep:文本搜索工具 sed:流编辑器,也是行编辑器 awk:文本格式化工具,文版报告生成器 正则表达式:是由一类字符所书写出的模式(pattern) 作用:配合支持使用正则表达式的文本搜索