Linux awk命令 --三剑客老大

基本用法:

  awk  [参数]  ['找谁{干啥}']  文件

参数:

  -F  分隔符

  -v  创建或修改awk变量

    OFS  输出分割符 awk显示每一列的时候分隔

'找谁{干啥}'

  找谁==条件

    比较表达式:
      ==  等于
      >=  大于等于
      <=  小于等于
      >   大于
      <   小于
    注:如果列不止数字,想只比较数字的话。可以用+0方法。eg:'$5+0>10'

    正则表达式:
      ~    表示包含或匹配
        示例:awk '$1~/\/dev\/sda1/{print $2,$NF}' df.txt
      !~   不包含或不匹配
      正则

        ^  是哪一列的开头
        $  是哪一列的结尾

    范围:
      ‘NR==1,NR==5’      第1行到第3行
      '$3==0,$3==1000'     第3列等于0到第3列等于1000
      '/那个字符/,/到那个字符/'
    注:不贪婪匹配,但可以匹配多次

    特殊:
      &&       并且
      ||        或者
      BEGIN{}       BEGIN 里面的内容会在awk读取文件之前执行
      END{}        awk读取文件内容之后执END内容

  {干啥==动作}
    默认 '{print $0}'
      $0  显示整行
      $num  显示第num列
      $NF    显示最后一列
      $(NF-1)    显示倒数第2列
      NR      显示行号
    gsub()
      条件:gsub(/找谁/,"替换为",哪一列)
    注:有两个动作以上,需要用;分割

例题:

1.显示/etc/passwd及行号

[root@maintain data]# awk -F':' '{print NR,$0}' /etc/passwd
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
ntp:x::::/etc/ntp:/sbin/nologin

2.显示/etc/passwd 第1列,第3列 倒数二列和最后一列

[root@maintain data]# awk -F':' '{print $1,$3,$(NF-1),$NF}' /etc/passwd
root /root /bin/bash
bin /bin /sbin/nologin
daemon /sbin /sbin/nologin
adm /var/adm /sbin/nologin
lp /var/spool/lpd /sbin/nologin
sync /sbin /bin/sync
shutdown /sbin /sbin/shutdown
halt /sbin /sbin/halt
mail /var/spool/mail /sbin/nologin
operator /root /sbin/nologin
games /usr/games /sbin/nologin
ftp /var/ftp /sbin/nologin

3.显示出/etc/passwd中 第3列大于80的行
条件:第3列大于80
    $3>80
动作:不写(默认{print $0})

[root@maintain data]# awk -F':' '$3>80' /etc/passwd
nobody:x:::Nobody:/:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin

4.显示磁盘使用率 大于10% 的磁盘分区和挂载点(目录)

条件:使用率大于10
    $5>10
动作:显示磁盘分区和挂载点
    print $1,$NF

[root@maintain data]# df | awk '$5+0>10'
/dev/sda2 10G .4G .7G % /
/dev/sda1 497M 117M 381M % /boot

5.创建一个test文本,包括以下内容:

Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918691635 :250:100:175

说明:第1列是姓,第2列是名字,第3列是ID,第4列是三次捐款

a.显示所有以一个D或X开头的人名全名
条件:名字以D或X开头
  $2~/^[DX]/
动作:显示全名
  print $1,$2

[root@maintain data]# awk '$2~/^[DX]/{print $1,$2}' reg.txt
Zhang Dandan
Zhang Xiaoyu
Wang Xiaoai

b.显示所有ID号码最后一位数字是1或5的人的全名
条件:ID号码最后一位数字是1或5
    $3~/[15]$/
动作:显示全名
    print $1,$2

[root@maintain data]# awk '$3~/[15]$/{print $1,$2}' reg.txt
[root@maintain data]# awk '$3~/(1|5)$/{print $1,$2}' reg.txt
[root@maintain data]# awk '$3~/1$|5$/{print $1,$2}' reg.txt
Zhang Xiaoyu
Wu waiwai
Wang Xiaoai
Li Youjiu
Lao Nanhai

c.显示Xiaoyu的捐款,每个值时都有以$开头,如$520$200$135
gsub(/找谁/,"替换为",哪一列)
条件:Xiaoyu的
  $2~/Xiaoyu/
动作:捐款每个值以$开头
  gsub(/:/,"$",$NF)

[root@maintain data]# awk '$2~/Xiaoai/{gsub(/:/,"$",$NF);print $0}' reg.txt
Wang Xiaoai $$$

d.显示所有人的全名,以姓,名的格式显示,如Meng,Feixue
条件:无
动作:姓与名有个,连接
    ','

[root@maintain data]# awk '{print $1","$2}' reg.txt         #双引号,引住的就是原输出
[root@maintain data]# awk -v OFS=',' '{print $1,$2}' reg.txt  #OFS 输出分割符 awk显示每一列的时候分隔符
Zhang,Dandan 
Zhang,Xiaoyu
Meng,Feixue
Wu,waiwai
Liu,Bingbing
Wang,Xiaoai
Zi,Gege
Li,Youjiu
Lao,Nanhai

6.统计 /etc/services 文件中空行的数量

[root@maintain data]# awk '/^$/{i++}END{print i}' /etc/services

Linux awk命令 --三剑客老大的更多相关文章

  1. linux awk命令详解

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  2. Linux awk命令常见使用方法介绍

    Linux awk命令常见使用方法介绍 By:授客 QQ:1033553122   awk运行方式有三种,其中常用的为命令行方式 awk [-F  field_separator]  '{patter ...

  3. linux awk命令详解,使用system来内嵌系统命令, awk合并两列

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  4. Linux——awk命令解析

    awk简介 awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK 的确拥有自己的语言: AWK 程 ...

  5. Linux awk命令详解??????????(研究)

    http://blog.chinaunix.net/uid-25120309-id-3801250.html 一.  AWK 说明  awk是一种编程语言,用于在linux/unix下对文本和数据进行 ...

  6. Linux awk命令使用方法

    awk是linux上非常好用的文本处理工具,常用于指定列的处理,包括获取指定列的内容.根据指定列匹配关系输出等文本处理.本文主要描述awk命令的基本语法.正则表达式与操作符的使用.常用内置变量的含义和 ...

  7. [转]Linux awk 命令 说明

    From : http://blog.csdn.net/tianlesoftware/article/details/6278273 一.  AWK 说明 awk是一种编程语言,用于在linux/un ...

  8. linux awk命令详解--转载

    awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理,然后输出 awk命令形式: awk [-F ...

  9. 转:Linux awk 命令 说明

    一.  AWK 说明 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是 ...

随机推荐

  1. Fiddler抓取https设置详解(图文)

    本文主要说明了自己在设置fiddler抓取https过程中所遇到的问题及解决步骤,特别是fiddler在设置证书的环节遇到的各种奇葩问题,特此分享! 声明:本文为原创文章,转载请注明来源:https: ...

  2. sysctl 命令

    sysctl命令 被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录/proc/sys中.它包含一些TCP/ip堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性 ...

  3. ECLIPSE 安卓项目 迁移 android stiod

    JNI 处理 http://www.cnblogs.com/flyme/p/4431762.html 导入ECLIPSE项目 http://blog.csdn.net/molei1991/articl ...

  4. 红队(red team)

    红队资源相关 https://threatexpress.com/redteaming/resources/ 红队相关技术 https://github.com/bluscreenofjeff/Red ...

  5. 【笔记】《CNCF × Alibaba云原生技术公开课》知识点

    一,课时1:第一堂“云原生”课 二,课时2:容器基本概念 1.已运行 docker run -d -t —name demo ubuntu top 命令, 是否可以在 demo 这个容器内部停止容器? ...

  6. 远程访问禅道开源版数据库(基于docker)

    navicat访问基于docker搭建的禅道的数据库,报错”2003 can't connect to MySQL server on '' (10061 'unknown error')“ 一.开启 ...

  7. postman 请求接口 Could not get any response

    前提: 今天用postman请求接口的时候,能请求到接口,但是打断点后发现方法里面要抛出异常就出现错误: 错误原因: 返回的 http 的 code不是3位的,如下我写成了四位 4002: <? ...

  8. Jenkins学习指南

    jenkinshttps://www.cnblogs.com/jimmy-xuli/p/9020825.htmlhttps://www.cnblogs.com/along21/p/10172855.h ...

  9. ES-基本概念

    目录: 1.  ElasticSearch是什么 2. 基本概念 3. 几个关键词   正文: 1.  ElasticSearch是什么     ElasticSearch是一个基于Lucene的搜索 ...

  10. 一文搞懂 Java 中的枚举,写得非常好!

    知识点 概念 enum的全称为 enumeration, 是 JDK 1.5 中引入的新特性. 在Java中,被 enum关键字修饰的类型就是枚举类型.形式如下: enum Color { RED, ...