Linux命令篇-awk 命令

gawk – pattern scanning and processing language;

awk:gawk是Unix中原始awk程序的GNU版本,强大之处在于可以写脚本来读取文本行的数据,然后处理并显示数据;

格式:gawk [参数]

常用参数:

OPTIONS 意义 f 从文件程序文件读取AWK程序源,而不是从第一个命令行参数。可以使用多个-f(或–file)选项 -F 指定描绘一行中数据字段的文件分隔符 -v 定义gawk程序中使用的变量和默认值 -mr 指定数据文件中的最大记录大小

awk常用内建变量:

OPTIONS 意义 $0 当前记录(这个变量中存放着整个行的内容) $1 ~ $n 当前记录的第n个字段,字段间由FS分隔 FS 输入字段分隔符 默认是空格或Tab NF 当前记录中的字段个数,就是有多少列 NR 已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中。 FNR 当前记录数,与NR不同的是,这个值会是各个文件自己的行号 RS 输入的记录分隔符, 默认为换行符 OFS 输出字段分隔符, 默认也是空格 ORS 输出的记录分隔符,默认为换行符 FILENAME 当前输入文件的名字

参考案例:

案例数据
$ vi netstat.txt
Proto Recv-Q Send-Q Local-Address          Foreign-Address             State
tcp        0      0 0.0.0.0:3306           0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:80             0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:9000         0.0.0.0:*                   LISTEN
tcp        0      0 coolshell.cn:80        124.205.5.146:18245         TIME_WAIT
tcp        0      0 coolshell.cn:80        61.140.101.185:37538        FIN_WAIT2
tcp        0      0 coolshell.cn:80        110.194.134.189:1032        ESTABLISHED
tcp        0      0 coolshell.cn:80        123.169.124.111:49809       ESTABLISHED
tcp        0      0 coolshell.cn:80        116.234.127.77:11502        FIN_WAIT2
tcp        0      0 coolshell.cn:80        123.169.124.111:49829       ESTABLISHED
tcp        0      0 coolshell.cn:80        183.60.215.36:36970         TIME_WAIT
tcp        0   4166 coolshell.cn:80        61.148.242.38:30901         ESTABLISHED
tcp        0      1 coolshell.cn:80        124.152.181.209:26825       FIN_WAIT1
tcp        0      0 coolshell.cn:80        110.194.134.189:4796        ESTABLISHED
tcp        0      0 coolshell.cn:80        183.60.212.163:51082        TIME_WAIT
tcp        0      1 coolshell.cn:80        208.115.113.92:50601        LAST_ACK
tcp        0      0 coolshell.cn:80        123.169.124.111:49840       ESTABLISHED
tcp        0      0 coolshell.cn:80        117.136.20.85:50025         FIN_WAIT2
tcp        0      0 :::22                  :::*                        LISTEN
  • 输出指定列(未指定格式)
其中单引号中的被大括号括着的就是awk的语句; 注意,其只能被单引号包含;
其中的$1..$n表示第几例;注:$0表示整个行
下面两个命令是等价的
$ awk '{print $1, $4}' netstat.out
$ cat netstat.out | awk '{print $1, $4}'
  • 输出指定列(指定格式)
awk的格式化输出和C语言的printf没什么两样
$ awk '{printf "%-8s %-8s %-8s %-18s %-22s %-15s\n",$1,$2,$3,$4,$5,$6}' netstat.out
  • 过滤记录
过滤记录 - 简单过滤
过滤条件为: 第三列的值为0 && 第6列的值为LISTEN
"=="为比较运算符; 其他比较运算符:!=、>、=、
  • 指定分隔符
下面两个命令是等价的
$ awk  'BEGIN{FS=":"} {print $1,$3,$6}' /etc/passwd
$ awk -F: '{print $1,$3,$6}' /etc/passwd

指定多个分隔符: awk -F '[;:]'

以\t作为分隔符输出
$ awk  -F: '{print $1,$3,$6}' OFS="\t" /etc/passwd
  • 正则匹配
匹配FIN状态
 ~ 表示模式开始;  /xxx/中是模式,这是一个正则表达式的匹配;
$ awk '$6 ~ /FIN/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.out

匹配WAIT字样的状态
$ awk '$6 ~ /WAIT/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.out

使用 "/FIN|TIME/" 来匹配 FIN 或者 TIME
$ awk '$6 ~ /FIN|TIME/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.out

awk可以像grep一样的去匹配第一行
$ awk '/LISTEN/' netstat.out

模式取反
下面两个等价
$ awk '$6 !~ /WAIT/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.out
$ awk '!/WAIT/ {print NR,$4,$5,$6}' OFS="\t" netstat.out
  • 拆分文件
按第6例分隔文件
$ awk 'NR!=1{print > $6}' netstat.out

把指定的列输出到文件
$ awk 'NR!=1{print $4,$5 > $6}' netstat.out

复杂拆分文件
$ awk 'NR!=1{if($6 ~ /TIME|ESTABLISHED/) print > "1.txt";
else if($6 ~ /LISTEN/) print > "2.txt";
else print > "3.txt" }' netstat.out
统计所有的C文件、CPP文件、H文件的文件大小总和
$ ls -l  *.cpp *.c *.h | awk '{sum+=$5} END {print sum}'

统计各个connection状态的用法
$ awk 'NR!=1{a[$6]++;} END {for (i in a) print i ", " a[i];}' netstat.out

统计每个用户的进程的占了多少内存
$ ps aux | awk 'NR!=1{a[$1]+=$6;} END { for(i in a) print i ", " a[i]"KB";}'

Original: https://www.cnblogs.com/HOsystem/p/16602397.html
Author: HOsystem
Title: Linux命令篇-awk 命令

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

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

(0)

大家都在看

  • 一维热传导方程的回焊炉子炉温模型

    赛题链接 论文链接 1. 有限差分方法 参考 1.1 一阶微分 由泰勒公式: 对上式变形即可以得到 一阶微分的向前差分公式: 将上式中的h用-h替代,则可以得到 一阶微分的向后差分…

    Linux 2023年6月14日
    0112
  • 面试必问的安卓虚拟机,你真的掌握了么?——安卓虚拟机基础知识回顾

    前言 21世纪,安卓虚拟机正在一步步的走入我们的生活,小到个人部分朋友在电脑上使用安卓虚拟机玩手游,大到安卓从业人员在虚拟机上面跑程序。不得不承认,对于每一位Androider 而…

    Linux 2023年6月13日
    0103
  • Docker配置LNMP环境

    目录规划 根目录下新建www目录,集中存放相关的配置文件和web文件 Mysql 从dockerhub拉取mysql镜像 $ docker pull mysql 实例化镜像,启动一…

    Linux 2023年6月13日
    098
  • MHA实现MySQL的高可用性

    对主节点进行监控,可实现自动故障转移至其它从节点;通过提升某一从节点为新的主节点,基于主从复制实现,还需要客户端配合实现。 目前MHA主要支持一主多从的架构,要搭建MHA,要求一个…

    Linux 2023年6月7日
    0115
  • Redis采用不同内存分配器碎片率对比

    我们知道Redis并没有自己实现内存池,没有在标准的系统内存分配器上再加上自己的东西。所以系统内存分配器的性能及碎片率会对Redis造成一些性能上的影响。在Redis的 zmall…

    Linux 2023年5月28日
    096
  • 面试题目汇总

    目录: 1、数字数组数字数组2、字符串字符串3、链表 链表4、二叉树二叉树 5、堆栈 堆栈 posted @2019-12-11 20:35 风御之举 阅读(63 ) 评论() 编…

    Linux 2023年6月13日
    095
  • 手撕spring核心源码,彻底搞懂spring流程

    引子 十几年前,刚工作不久的程序员还能过着很轻松的日子。记得那时候公司里有些开发和测试的女孩子,经常有问题解决不了的,不管什么领域的问题找到我,我都能帮她们解决。但是那时候我没有主…

    Linux 2023年6月14日
    0124
  • [20210930]bbed读取数据块7 fffext.sh.txt

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

    Linux 2023年6月13日
    089
  • Linux修改dns域名配置

    bash;gutter:true;</p> <h1>!/bin/bash</h1> <h1>1.定义DNS的文件</h1&gt…

    Linux 2023年6月13日
    0112
  • logstash写入文件慢的问题排查记录

    终于找到根本原因了!!!!! logstash部署到k8s集群内部的,当所在节点的CPU资源被其他应用抢占时,logstash的处理速度就会降低 问题现象 logstash从kaf…

    Linux 2023年6月14日
    0176
  • Springboot Mybatis 集成 Redis

    添加 Redis 依赖 $xslt</p> <p>org.springframework.boot spring-boot-starter-data-red…

    Linux 2023年5月28日
    097
  • 常用命令-lsof

    作者:Outsrkem原文链接:https://www.cnblogs.com/outsrkem/p/14608224.html本文版权归作者所有,欢迎转载,但未经作者同意必须保留…

    Linux 2023年6月6日
    0110
  • Cisco实验:【DHCP配置】客户端跨网段通过DHCP服务器自动获取动态IP和固定IP地址

    模拟环境:R1为路由器e0/0接口和e0/1接口分别连接两个网段,e0/0连接用户区域,e0/1连接服务器区域;用户区域中SW1为接入层交换机,连接一台PC(R2模拟)和一台打印机…

    Linux 2023年6月8日
    0193
  • 如何在Windows 10 上定时备份线上Minio 资源

    @ 一、系统环境 二、软件安装 三、设置定时任务 3.1 创建账号 3.2 同步测试 3.3 编写同步脚本 3.4 脚本测试 3.5 创建定时任务 3.6 定时任务测试 四、总结 …

    Linux 2023年5月27日
    0188
  • IDEA 无法显示 Run Dashboard 的解决方法

    前言 最近开始接触微服务的项目,项目很多有时候本地调测需要启动多个项目,看到同事都是使用dashboard管理项目,服务和端口排列的整整齐齐。但是我dashboard里面啥都没有,…

    Linux 2023年6月14日
    0123
  • Linux基础学习(一)

    Linux发行版 以软件包格式:rpm:Red Hat Enterprise LinuxCentOSopenSUSEFedoradeb:DebianUbuntulinux mint…

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