007 Linux 命令三剑客之-awk

Linux 命令三剑客,sed、grep、awk。

  • sed:擅长数据修改。
  • grep:擅长数据查找定位。
  • awk:擅长数据切片,数据格式化,功能最复杂。

awk 更适合格式化文本,对文本进行较复杂格式处理,awk 程序对输入文件的每一行进行操作。awk 是一门解释型的编程语言。文本处理、输出格式化的文本报表、执行算数运算、执行字符串操作等等。

BEGIN { …. initialization awk commands …}{ …. awk commands for each line of the file…}END { …. finalization awk commands …}
  • BEGIN{} 语句块在程序的开头执行,它只执行一次,在这里可以初始化变量。BEGIN 是 awk 的关键字,因此它必须为大写,注意,这个语句块是可选的;
  • 主{ }部分,没有关键字,运行处理文件的每一行执行的命令;
  • END 语句块在程序的最后执行,END 是 awk 的关键字,因此必须为大写,它也是可选的。

  • awk 将每一行视为由多个字段组成,每个字段由”间隔符”分隔。默认情况下”间隔符” 是一个或多个空格字符,因此行:this is a line of text 包含6个字段。在 awk 中,第一个字段称为 $1,第二个字段称为 $2,以此类推,整行称为 $0。

  • awk 内置变量 FS 可以设置间隔符,如设置 FS=”:”,则它将根据’:’作为间隔符。

【内置变量】

  • FS # 输入字段的分隔符
  • NR # 当前行号,已读的记录数
  • NF # 当前行中的字段数量
  • $NF # NF 当前行中的字段数量(行参数数量),假如行参数有六个,那么NF=6,重点来了,如果我要取当前行的最后一个参数,使用 “$6” 和 “$NF” 都能取到最后一个参数,也就是说 $6=$NF=第6个参数值。

【常用可选参数】

  • -v # 赋值一个用户定义变量
  • -f # 从脚本文件中读取 awk 命令
  • -F # 相当于内置变量 FS

  • awk 可以对任何文件进行操作,包括 std-in,在这种情况下,它通常与 ‘|’ 命令一起使用,例如,结合 grep,cat 或其他命令。

  • awk 是一种面向行的语言。首先是模式,然后是动作。操作语句用” {} “括起来。
  • awk 模式包括正则表达式 (使用与”grep -E”相同的语法) 和使用的组合特殊符号 “&&” 表示”逻辑AND “,”||”表示”逻辑或”,”!” 的意思是”逻辑不”。
awk 'BEGIN{ commands } pattern{ commands } END{ commands }'

eg:统计指定ip和端口号,各种 tcp 连接状态的数量

netstat -n | grep 1.2.3.4:22 | awk '/^tcp/ {++State[$NF]} END {for (i in State) print i, State[i]}'
  • 命令中,^tcp用于匹配开头包含tcp字符的文本行;
  • $NF 指的是每行最后一个字段,数组State[$NF]就是以最后一个字段为下标指向一个存储单元或者说变量,此处代表该字段的统计结果, 也就是++的意义所在, 统计值自增一。
  • END不能缺少表示END符号之后的指令于处理所有行结束时执行。
  • i是字段,State[i]即为统计结果,每行处理完成则State[$NF] 加1。

  • 统计文本行数

awk 'END  {print NR}' warn.log #统计 warn.log 文件行数。
  • 指定以 , 为分隔符;输出为 hello world。
    文本内容如下:
    hello,world,awk,!
awk -F, '{print $1,$2}' info.log # -F, 指定以逗号分隔。
  • 实现计算表达式
awk 'BEGIN{print  115+100}'

awk 命令,擅长文本格式化处理,这里只是起到一个抛砖引玉的作用,awk 语法较为复杂,感兴趣的可以深入学习,当然你也可以用 python 等语言来做一些脚本任务的处理。

「不甩锅的码农」原创,转载请注明来源,未经授权禁止商业用途!同名 GZH 请关注!

Original: https://www.cnblogs.com/bilahepan/p/15848046.html
Author: 不甩锅的码农
Title: 007 Linux 命令三剑客之-awk

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/524132/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • K8s-二进制安装

    K8S-二进制安装使用 1.IP总规划 服务类型 ip地址 组件 k8s-master01 etcd集群节点1 192.168.80.20 kube-apiserver、kube-…

    Linux 2023年6月13日
    092
  • 【Linux进程间通信】共享内存的使用

    背景 最近需要开发一个测试程序,接受Tester端的测试指令,执行一条条外设的测试用例,执行完成后将测试数据的结果上报,上报方式未定,考虑到耦合和配套问题,决定采用共享内存机制,设…

    Linux 2023年6月13日
    092
  • linux_arch

    由于以前新手开始接触的是ubuntu,然后通过ubuntu又开始了解centos,这俩系统基本是稳定版本可以用作服务器,但是centos的还是居多,一来比较接近redhat;但是这…

    Linux 2023年6月14日
    078
  • SQL87 最差是第几名(一)

    本题链接表结构如下所示。 +——-+——–+| grade | number |+——-+&#8…

    Linux 2023年6月13日
    076
  • HTS备份脚本

    #!/bin/bash #program:用于升级前后备份;看时间戳 #author:sundz #version:v1 20220610 创建脚本 备份mysql以及aboss程…

    Linux 2023年6月7日
    065
  • springboot JDBC整合

    1、建立一个springboot项目,并导包:JDBC API 与 MySQL Driver 2、项目建好之后,发现自动帮我们导入了如下的启动器: <dependency&g…

    Linux 2023年6月14日
    0109
  • Linux笔记 bash解决if not found 问题

    Linux笔记 bash解决if not found 问题 原因是if [无空格然后在内容然后再空格] 我想应该新手小白都会犯这样问题 正确写法 if [ $# -ne 1 ] 错…

    Linux 2023年6月8日
    0102
  • 使用input+datalist简单实现实时匹配的可编辑下拉列表-并解决选定后浏览器默认只显示value的可读性问题

    问题背景 最近小伙伴提了一个希望提高后台下拉列表可操作性的需求,原因是下拉列表选项过多,每次下拉选择比较费时费力且容易出错,硬着头皮啃了啃前端知识,网上搜寻了一些下拉列表实现的资料…

    Linux 2023年6月6日
    082
  • Maven中POM文件总体配置说明

    POM文件总体配置说明 xxx xxx xxx xxx 4.0.0 xxx xxx jar 1.0-SNAPSHOT xxx-maven http://maven.apache.o…

    Linux 2023年6月6日
    080
  • 系统初始化

    一般系统安装好后,按照自己习惯定义 csharp;gutter:true;</p> <h1>alias</h1> <p>echo &…

    Linux 2023年6月7日
    049
  • ASP.NET Core 2.2 : 二十. Action的多种数据返回格式处理机制

    上一章讲了系统如何将客户端提交的请求数据格式化处理成我们想要的格式并绑定到对应的参数,本章讲一下它的”逆过程”,如何将请求结果按照客户端想要的格式返回去。 …

    Linux 2023年6月7日
    0120
  • EmuELEC 4.3 安装和乐视手柄 LeWGP-201 evremap问题解决

    一年多前安装了EmuELEC3.9之后, 就一直没有再更新过, 平时玩玩小游戏也很正常. 昨天心血来潮想把吃灰的乐视手柄用起来, 结果发现3.9里面没有evremap 命令. 猜测…

    Linux 2023年5月27日
    0231
  • mycat数据库集群系列之mycat读写分离安装配置

    最近在梳理数据库集群的相关操作,现在花点时间整理一下关于mysql数据库集群的操作总结,恰好你又在看这一块,供一份参考。本次系列终结大概包括以下内容:多数据库安装、mycat部署安…

    Linux 2023年6月14日
    0116
  • Linux下侦听端口被占用,怎么解决?

    不知道你有没有遇到过这种问题:在同一台物理机器上,服务A 启动时侦听 端口1 ,同时它也作为客户端去连接 服务B,连接服务B时候会随机一个端口号,假如随机的是 端口2 ,这个时候 …

    Linux 2023年6月13日
    088
  • vim编辑器

    vim 编辑器 2018 年12 月12 日 22:15 常用操作 命令模式(初始模式) 输入模式(i 进入) 底行命令模式(:进入) / 往下搜索 ? 往上搜索 n 搜索下一个 …

    Linux 2023年6月13日
    0108
  • Forms组件;cookie与session

    Forms组件 需求 如果需要编写一个校验用户名和密码是否合法的功能,那么 前端需要自己编写获取用户数据的各种标签 前端需要自己想方设法的展示错误的提示信息 后端需要自己想方设法的…

    Linux 2023年6月7日
    080
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球