一、Awk 的两个特殊模式

  • BEGIN 和 END,BEGIN 被放置在没有读取任何数据之前,而 END 被放置在所有的数据读取完成以后执行
  • 体现如下:
    BEGIN{}: 读入第一行文本之前执行的语句,一般用来初始化操作
    {}: 逐行处理
    END{}: 处理完最后以行文本后执行,一般用来处理输出结果
  • 实例:
  • 文件开头加REDHAT,末尾加WESTOS,打印行号和内容
[root@server19 mnt]# awk -F: 'BEGIN {print "REDHAT"} {print NR;print} END {print "WESTOS"}' passwd
REDHAT
1
root:x:0:0:root:/root:/bin/bash
2
bin:x:1:1:bin:/bin:/sbin/nologin
3
daemon:x:2:2:daemon:/sbin:/sbin/nologin
4
adm:x:3:4:adm:/var/adm:/sbin/nologin
5
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6
sync:x:5:0:sync:/sbin:/bin/sync
7
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
WESTOS
  • 统计文本总字段个数
[root@server19 mnt]# vim test.txt
hui hui XX
XX
XX ni Xx [root@server19 mnt]# awk 'BEGIN{i=0}{i+=NF}END{print i}' test.txt

7

二、Awk高级应用

1. if单分支语句

  • 统计登录shell为bash的用户
[root@server19 mnt]# awk -F: 'BEGIN{i=0}{if($7~/bash$/){i++}}END{print i}' /etc/passwd
2
  • 统计/etc/passwd下uid小于500的用户个数
[root@server19 mnt]# awk -F: 'BEGIN{i=0}{if($3<500){i++}}END{print i}' /etc/passwd
31

2. if双分支语句

  • 统计uid小于等于500和大于500的用户个数
[root@server19 mnt]# awk -F: 'BEGIN{i=0;j=0}{if($3<=500){i++}else{j++}}END{print i,j}' /etc/passwd
31 9

3. for循环

  • 生成1-5序列
[root@server19 mnt]# awk 'BEGIN{for(i=1;i<=5;i++){print i}}'
1
2
3
4
5 [root@server19 mnt]# seq 5 ##seq命令可以直接生成

1

2

3

4

5

4. while循环

语法一:
[root@test ~]# awk 'i=1 {} BEGIN {while (i<3) {++i;print i}}' test.txt
1
2
3
[root@test ~]# 语法二:

[root@test ~]# awk 'BEGIN {do {++i;print i} while (i<3)}' test.txt

1

2

3

[root@test ~]#

[转帖]SHELL—— awk两个特殊模式(BEGIN 和 END)及awk高级应用(条件判断、循环)的更多相关文章

  1. Shell合并两个文件成一个文件的两列paste,awk

    Shell合并两个文件成一个文件的两列 发布时间:2014-07-20   编辑:www.jquerycn.cn Shell合并两个文件成一个文件的两列,提供了两种方法,普通shell脚本,awk脚本 ...

  2. 【转帖】两种IO模式:Proactor与Reactor模式

    两种IO模式:Proactor与Reactor模式 https://www.cnblogs.com/pigerhan/p/3474217.html. 挺好的说明了epoll和IOCP的区别 在高性能的 ...

  3. [转帖]Shell运维手册

    shell实例手册    https://github.com/liquanzhou/ops_doc   0 说明{       手册制作: 雪松   更新日期: 2018-09-11       欢 ...

  4. [转帖]shell中的特殊符号总结

    http://www.embeddedlinux.org.cn/emb-linux/entry-level/201907/18-8747.html 在shell中常用的特殊符号罗列如下: # ;   ...

  5. [转帖]IIS7.5应用程序池集成模式和经典模式的区别介绍

    IIS7.5应用程序池集成模式和经典模式的区别介绍 之前转帖过一个 但是感觉不如这个说的细: https://www.jb51.net/article/31010.htm 关注脚本之家微信公众号(jb ...

  6. java web学习总结(二十九) -------------------JavaBean的两种开发模式

    SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ...

  7. 一步一步学FRDM-KE02Z(一):IAR调试平台搭建以及OpenSDA两种工作模式设置

    摘要:FRDM-KE02Z是飞思卡尔公司较为新的微控制器,学习和开发资料较少.从本篇开始会陆续介绍其相关的开发流程,并完成一个小型的工程项目.这是本系列博客的第一篇,主要介绍开发环境IAR for A ...

  8. ASP.Net的两种开发模式

    一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...

  9. Spark on YARN两种运行模式介绍

    本文出自:Spark on YARN两种运行模式介绍http://www.aboutyun.com/thread-12294-1-1.html(出处: about云开发)   问题导读 1.Spark ...

  10. javaweb学习总结(二十一)——JavaWeb的两种开发模式

    SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ...

随机推荐

  1. 避坑指南:关于SPDK问题分析过程

    [前言] 这是一次充满曲折与反转的问题分析,资料很少,代码很多,经验很少,概念很多,当内核态,用户态,DIF,LBA,大页内存,SGL,RDMA,NVME和SSD一起迎面而来的时候,问题是单点的意外, ...

  2. OpenCV萌新福音:易上手的数字识别实践案例

    摘要:信用卡识别的案例用到了图像处理的一些基本操作,对刚上手CV的人来说还是比较友好的. 本文分享自华为云社区<Python openCV案例:信用卡数字识别>,原文作者:深蓝的回音 . ...

  3. vue-grid-layout数据可视化图表面板优化过程所遇问题汇总

    对于drag事件不熟悉的,请先阅读:<drag事件详解:html5鼠标拖动排序及resize实现方案分析及实践> 之前老项目grafana面板,如下图所示(GEM添加图表是直接到图表编辑, ...

  4. Datahub新版本0.9.1更新,列级别数据血缘功能发布!

    大家好,我是独孤风. 近期Datahub进行了一次大的版本更新,从0.9版本以后Datahub也正式发布了列级别数据血缘的功能. 0.9.1版本又增加了,列的影响分析这个功能. 这样Datahub对于 ...

  5. Intellij Java JNI 调用 C++

    也可以用 JNA,但性能没有 JNI 好.JNA的Demo没有做,可以参考(https://www.bilibili.com/video/BV1xU4y1F7Ep/?spm_id_from=autoN ...

  6. Java 网络编程 —— ServerSocket 详解

    构造 ServerSocket ServerSocket 的构造方法有以下几种重载形式 ServerSocket() throws IOException ServerSocket(int port) ...

  7. MVVM架构

    一.MVVM架构和Jetpack MVVM即Model-View-ViewModel的缩写,它的出现是为了将图形界面和业务逻辑,数据模型进行解耦.在前面章节所学习的Jetpack组件,大部分是为了能够 ...

  8. Codeforce 1335C - Two Teams Composing 统计技能种类数量+统计同一技能最大数量

    7 4 2 4 1 4 3 4 统计技能种类数量 4种不同技能 统计同一技能最大数量 技能1(数量1) 技能2(数量1) 技能3(数量1) 技能4(数量4) 选出 技能4(数量4) 作为 第2组 扣除 ...

  9. 为什么我要迁移SpringBoot到函数计算

    前言 为什么要迁移? 我们的业务有很多对外提供服务的 RESTful API,并且要执行很多不同的任务,例如同步连锁 ERP 中的商品信息到美团/饿了么等平台,在线开发票等.由于各种 API 和任务执 ...

  10. vscode报错Already included file name ‘xxx‘ differs from file name ‘xxx‘ only in casing的解决方法:

    场景:我们创建了一个文件是小写开头的,又改成大写开头的. 比如: relationDemo.vue 改成 RelationDemo.vue 原因:缓存的判重逻辑是不区分大小写导致的.在这种情况下,vs ...