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

最新文章

  1. 保持Qt GUI响应的几种方法
  2. hadoop生态圈介绍
  3. php集成动态口令认证
  4. Windows 磁盘检查命令
  5. PHP使用session_set_save_handler陷阱
  6. qemu-kvm简单使用
  7. UML系列01之 UML用例图
  8. leetcode先刷_Path Sum
  9. nyoj 破门锁(水题)
  10. Educational Codeforces Round 32 E. Maximum Subsequence
  11. libsecp256k1 与 openssl ecdsa
  12. Spring Boot - 配置介绍
  13. 1、从C语言到C++
  14. Css基础笔记(部分)
  15. RDD PAPER
  16. MyBatis入门(一)—— 入门案例
  17. MySQL(一)索引的创建和删除
  18. xgboost: 速度快效果好的boosting模型
  19. java 注解详解
  20. Java线程常用方法详解

热门文章

  1. redis运维手册
  2. JavaScript中函数文档注释
  3. linux 中的命令是什么?执行命令的几种方式?如何自己创建命令?
  4. docker清理
  5. nginx 增加认证
  6. python库 使用shutil来删除文件夹时报PermissionError时的解决方案
  7. Web在线报表设计器使用指南
  8. oracle数据库基于(streams流复制)的双机热备配置手册
  9. Number of Containers ZOJ - 3175(数论题)
  10. CSP 通信网络(201709-4)