1.为什么要使用awk

举一个简单的例子,作为一个java开发人员,在查看日志服务器(即时保存所有线上环境的日志)上的日志的时候,由于部署了服务的服务器不止一台,当想要查找某一个特定信息的时候,由于不清楚该特定信息在那台服务器上,所以一般都是全量的搜的

比如

grep  'specialInfo'   /project/myApplication/10.*/log/info.log

或者想要追踪是否某一台服务器才产生某信息时

tail -f  /project/myApplication/10.*/log/info.log |grep  'specialInfo'

好的,现在我们能找到具体的这个信息出现时的日志了。

但是,这个日志是在哪个ip的服务器上啊....

简单的命令这时候好像不能满足这个需求。而产生线上问题的时候,往往时间都很宝贵,需要迅速定位问题的原因以及问题的影响

所以我觉得掌握一些能够快速筛选日志的手段还是很有必要的

而awk则是对日志这个具有规则的文本进行筛选的一个很好的手段

2.awk基础

awk 支持以制定的分隔符将一行文本切成多段    默认是使用空格作为分隔符  也可以通过-f命令来进行替换   例如awk -f, 则以逗号作为分隔符

分隔后的文本可以用符号来表示  $0 表示整行    $1表示分割后的第一段文本    $2表示第二段  依次类推,

NF是代表该行的数量 那么用NF-1就能取到倒数第二列

以上是最基础的,那么接下来我们想找一下第二列大于15的行的第三列  两种方式都可以起到过滤的作用

awk中 如果用BEGIN{命令1}{命令2}{命令3}End{命令4}的话  1会首先执行,2和3 会对每行输入执行,4则会最会执行

命令是以花括号来分隔的,可以进行嵌套 下面的        BEGIN{{命令1}{命令2}}

再来一个比较有用的   awk -v 可以设置变量     下面就是当第二列大于15的时候 i会增加1 每行都打印

正则表达式

~ \regex\     ~! \regex\

~是包含       ~! 是不包含

再来个统计

sum       下面利用sum数组 统计第一列都有哪几种,出现了几次

awk还有很多其他的功能,以后用到了再在这个补充,基础部分我就简单写这么一点

3.awk实际应用

有了上面的基础,解决1中的问题就很简单了

1、tail -f 多个文件时查看文件的具体路径

tail -f 多个文件时,在切换文件的时候会首先打印      ==> fileName<==

那么就利用这一点

tail -f ../project/myApp/10.*/log/cron.log |awk '$1 ~/==>/{i=$2} {print $0"--------"i}'

上面这行命令就是在输出中定义一个变量 i   然后当行里面有==>时,将文件路径保存在i中, 然后打印每一行的内容,后缀加上文件名,这样每当切换文件的时候i就会更新,就能够实现功能

2、cat 多个文件的时候查看文件的路径  和上面的类似,直接读内联变量FILENAME 就可以了,grep继续查找要找的内容

awk '{i=FILENAME} {print $0"--------"i}' ../project/facrm.ms.netease.com/10.*/log/*.log |grep  find

3、查找某个文件中包含某个字符串 且不包含某个字符串 并统计这种的数量

判断第一列包含1然后所有行不包含6 统计整列出现的次数

awk '{if($1 ~/1/){if($0 ~! /6/){sum[$0]++}}}END{for(i in sum){print i,sum[i]}}' test

这种感觉存着比较好,之后稍微改改直接用,之后有业务场景了在补充啦

awk命令使用经验的更多相关文章

  1. linux awk命令详解

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  2. awk命令详解

    搜索 纠正错误  添加实例 awk 文本和数据进行处理的编程语言 补充说明 awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一个或多个文件 ...

  3. Linux安全基础:awk命令的使用

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...

  4. AWK命令学习

    使用方法 awk 'pattern {action}' {filenames} 尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到 ...

  5. awk 命令

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...

  6. AWK命令的用法

    1.awk命令简介: awk是一种可以处理数据.产生格式化报表的语言,功能十分强大. awk的工作方式是读取数据,将每一行数据视为一条记录(record)每笔记录以字段分隔符分成若干字段,然后输出各个 ...

  7. [Linux] linux awk命令详解

    reference : http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 简介 awk是一个强大的文本分析工具,相对于g ...

  8. awk命令简单介绍

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  9. Linux的awk命令

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

随机推荐

  1. ES6新语法

    ES6新语法概览 简介 ES6是JavaScript语言的新一代标准,加入了一些新的功能和语法,正式发布于2015年6月,亦称ES2015:该标准由ECMA(欧洲计算机制造联合会)的第39号技术专家委 ...

  2. 一 .isinstance(obj,cls)和issubclass(sub,super)

    class Foo: pass class Bar(Foo): pass obj = Bar() isinstance(obj,cls)检查是否obj是否是类 cls 的对象 print(isinst ...

  3. 利用BootStrap Table插件实现自己的弹出框分页。

    参考链接1:    官网:http://bootstrap-table.wenzhixin.net.cn/zh-cn/home/        开始使用:http://bootstrap-table. ...

  4. JavaScript我学之一变量类型

    本文是网易云课堂金旭亮老师的课程笔记,记录下来,以供备忘. 变量类型  只有6种 : 四种原始数据类型boolean , number, string , undefine, 其他object,fun ...

  5. Centos7/RHEL7 开启kdump

    Kdump是一种基于kexec的Linux内核崩溃捕获机制,简单来说系统启动时会预留一块内存,当系统崩溃调用命令kexec(kdump kernel)在预留的内存中启动kdump内核, 该内核会将此时 ...

  6. 我的Python笔记

    声明:本文整理借鉴金角大王的Python之路,Day1 - Python基础1,仅供本人学习使用!!! 本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程 ...

  7. Python 求点到直线的垂足

    Python 求点到直线的垂足 在已知一个点,和一条已知两个点的直线的情况下 运算公式参考链接:https://www.cnblogs.com/mazhenyu/p/3508735.html def ...

  8. Linux 下执行本目录的可执行文件(命令)为什么需要在文件名前加“./”

    一.PATH 是环境变量,里面保存了执行文件路径(通常会包含多个路径,各路径之间以冒号":"进行间隔).当执行一个可执行文件(命令)时,Linux 会优先到 PATH 环境变量中保 ...

  9. selenium切换窗口后定位元素出现问题的解决方案

    在做UI自动化的过程中,有时需要由一个窗口跳转到另一个窗口,这时直接去定位页面元素,可能会出现问题,这时,我们需要将driver与新的窗口进行绑定. 完整代码如下:(python版) #coding= ...

  10. BZOJ.2780.[SPOJ8093]Sevenk Love Oimaster(广义后缀自动机)

    题目链接 \(Description\) 给定n个模式串,多次询问一个串在多少个模式串中出现过.(字符集为26个小写字母) \(Solution\) 对每个询问串进行匹配最终会达到一个节点,我们需要得 ...