美文网首页
awk使用指南与实战分析

awk使用指南与实战分析

作者: 茉莉清可乐对奶茶i | 来源:发表于2020-05-29 21:20 被阅读0次

1、 什么时候适合使用awk命令

(1) 逐行处理文件,希望对文件中每行文件的数据进行剔除,修改,会增加
(2) 除了基本的文件处理外,有更加复杂需求,如会进行全局计算,全局变量填写,都可以使用awk来帮助你分析

2、awk 的运作模式

2.1 awk是如何工作的

(1) 逐行读取输入的文本内容,一次从输入中读取一行数据,并且默认对每行的数据使用换行符进行分隔,每行分隔后的数据可通过$符号进行获取。

awk '{print $1}' /tmp/file.log
tail -10 /tmp/file.log | awk '{print $1}'

(2) 按照中括号{}命令内容,修改流中的数据。

awk '{$1="";$2="123";print $3}' /tmp/file.log
# 如果{}要处理的逻辑比较复杂,通过-f执行指定脚本处理
awk -fexecute.awk /tmp/file.log

(3) 将新的数据进行输出,你可以使用 >1.log输出到一个新的1.log文件,总之awk不会都原数据进行修改。

3、awk的几个常用参数

-f 参数

如果你是指定文件进行awk处理,那么你可以通过-f参数指定文件路径进行处理

awk -f '/tmp/file.log' '{print $1}'

$符号的使用

awk 命令的强大之处,他为你要处理的内容中,每行的每个元素都分配了变量名称,可以通过$符号来控制,awk默认使用空格作为每行数据的分隔符号。
如果file.log数据内容如下所示

a b c d e f g
h i j

那么使用awk命令执行

cat file.log | awk '{print $1}'

输出内容为

a
h

-F参数 指定每行数据的分隔符

file.log内容如下

a#b#d#e#f#g
h#i#j

执行一下脚本后

cat /tmp/file.log  | awk -F '#'  '{print $2}'

输出

b
i

awk BEGIN&END关键字

紧跟着BEGIN关键字后面的执行脚本,会在awk执行前,只执行一次,反之END就是在awk全部处理完成后,再执行一次接跟着END后面的脚本。注意,在整个awk'处理过程中,BEGIN与END后面的脚本只会执行一次。

$ cat file.log
a#b#d#e#f#g
h#i#j

注意,BEGIN 和end后面的脚本,和实际逻辑处理的脚本都会作为一个处理的整体,所以需要整体用单引号括起来

$ cat /tmp/file.log  | awk -F '#' 'BEGIN {print "处理执行开始"} {print $1} END {print "处理结果"}'
处理执行开始
a
h
处理结果

4、使用实战

剔除指定位置字符,将指定位置字符置为空。

$ cat 1.log
a废话1 a有用信息2 a有用信息3 a有用信息4 a废话5
b废话1 b有用信息2 b有用信息3 b有用信息4 b废话5

如果仅想剔除其中有用信息,那么执行以下脚本即可,下面的脚本可以帮助我们,将按空格分隔后第1个和第5个字符置为空。

$ cat 1.log | awk '{$1=""; $5=""; print $0}'
 a有用信息2 a有用信息3 a有用信息4
 b有用信息2 b有用信息3 b有用信息4

2 awk多分隔符进行字符串分隔(awk 多个分隔符)

若文件中的内容如下,可以看出,文件中的内容的每行数据并不是标准的空格分隔的数据,如果我想获取到 ‘调用我的客户端ip’这个字段,那么可以把'('和','也就是左括号和逗号都视为分隔符,然后进行取数。
awk命令的-F参数是支持多个分隔符的,通过在[]设置多个字符,进行分隔,具体使用如下

2.1 awk多分隔符,多个不同的字符串进行分隔

$ cat 2.log
2020-02-08 14:27:00 [业务单据号((接口名称,是否执行成功,执行耗时)(调用我的客户端ip,我的当前ip))]
2020-02-08 14:27:00 [业务单据号((接口名称,是否执行成功,执行耗时)(调用我的客户端ip,我的当前ip))]
2020-02-08 14:27:00 [业务单据号((接口名称,是否执行成功,执行耗时)(调用我的客户端ip,我的当前ip))]

如果以[作为分隔符,脚本如下

$ cat 2.log | awk -F'[' '{print $2;}'
业务单据号((接口名称,是否执行成功,执行耗时)(调用我的客户端ip,我的当前ip))]
业务单据号((接口名称,是否执行成功,执行耗时)(调用我的客户端ip,我的当前ip))]
业务单据号((接口名称,是否执行成功,执行耗时)(调用我的客户端ip,我的当前ip))]

如果以[或者(作为分隔符,脚本如下,此时需要将[(在最外层包裹一个[],-F命令中[]中的内容表示的是或的关系,[][]中括号和括号之间,表示的是与的关系。

$ cat 2.log  | awk -F '[[(]' '{print $2}'
业务单据号
业务单据号
业务单据号

如果以)(组合作为一个分隔符,脚本如下

$ cat 2.log  | awk -F '[)][(]' '{print $2}'
调用我的客户端ip,我的当前ip))]
调用我的客户端ip,我的当前ip))]
调用我的客户端ip,我的当前ip))]

相关文章

  • awk使用指南与实战分析

    1、 什么时候适合使用awk命令 (1) 逐行处理文件,希望对文件中每行文件的数据进行剔除,修改,会增加(2) 除...

  • 文本三剑客awk

    文本处理三剑客3-Awk awk的用户使用指南[http://www.gnu.org/software/gawk/...

  • Okhttp使用指南与源码分析

    Okhttp使用指南与源码分析 标签(空格分隔): Android 使用指南篇# 为什么使用okhttp### A...

  • <总结向> awk使用手册

    awk 用于文本文件的分析与处理 0x00 使用方法 awk '{pattern + action}' [file...

  • okhttp源码分析,文章收集《2》

    okhttp源码 github地址 OKHttp源码解析(一)--初阶Okhttp使用指南与源码分析OkHttp使...

  • M25_第九周:awk

    [TOC] AWK介绍 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并...

  • 《Python数据分析与挖掘实战.pdf》PDF高清完整版-免费

    《Python数据分析与挖掘实战.pdf》PDF高清完整版-免费下载 《Python数据分析与挖掘实战.pdf》P...

  • 精通awk 命令

    awk命令简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告...

  • awk统计nginx pv uv

    awk awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得...

  • awk & sed命令最佳实践

    一、awk命令 介绍awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成...

网友评论

      本文标题:awk使用指南与实战分析

      本文链接:https://www.haomeiwen.com/subject/fenrthtx.html