美文网首页Linux -- Ubuntulinux运维
Day19操作系统三剑客命令-awk

Day19操作系统三剑客命令-awk

作者: a幕城 | 来源:发表于2019-11-06 15:26 被阅读0次

01.三剑客awk命令概念介绍、*

概念说明:` pattern scanning and processing  language
           模式识别和脚本编写`
执行原理:`按行处理文件信息, 根据匹配条件信息, 完成相应操作动作`
语法结构: `awk [参数] '模式信息(条件) {动作}'  文件信息`

02.三剑客awk命令使用方法

`cat >> awk_test.txt <<EOF
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    918391635   :250:100:175   
EOF`
**练习题**
1):显示xiaoyu的姓氏和ID号码
`[root@localhost ~]# awk 'NR==2 {print $1,$3}' awk_test.txt 
Zhang 390320151`
2):显示姓氏是张的的人,显示他的第二次捐款的金额
`[root@localhost ~]#  awk '/^Zhang/ {print $1,$2,$4}' awk_test.txt | awk -F ':' '{print $1,$3}
Zhang Dandan  100
Zhang Xiaoyu  90`
3)显示所有以41开头的ID号码的人的全名和ID号码
`[root@localhost ~]# awk '/41/{print $1,$2,$3}' awk_test.txt 
Zhang Dandan 41117397
Liu Bingbing 41117483`
4)显示所有ID号码后面是1和5的人的全名
`[root@localhost ~]# awk '$3~/[15]$/{print$1,$2}' awk_test.txt 
Zhang Xiaoyu
Wu Waiwai
Wang Xiaoai
Li Youjiu
Lao Nanhai`
5)显示所有ID号码后面不是1和5的人的全名
`[root@localhost ~]# awk '$3~/[^15]$/{print $1,$2,$3}' awk_test.txt |column -t
Zhang  Dandan    41117397
Meng   Feixue    80042789
Liu    Bingbing  41117483
Zi     Gege      1986787350`
6)显示Xiaoyu的捐款,每个时都有以$开头, 如$110$220$330
`[root@localhost ~]# awk '/Xiaoyu/{print $4}' awk_test.txt |sed 's#:#$#g'
$155$90$201`

print:输出指定的信息
gusb : 替换指定的信息 gawk substitute -- gsub
gsub(// , "" , x) --> gsub (/要替换的信息) gusb(/:/ ,"",)
说明:NF表示列信息,NF表示最后一列, ?倒数第二列 ==3
NF ==4 - 1
oldboy linux edu 50
(NF-1) (NF)
(4-1)4 4==NF==50 $NF-1==50-1=49
总结:
awk用到参数: -F 指定列分隔符号
awk用到的动作: print 指定输出的信息
gsub 替换指定的信息
awk内置的变量: NR 表示行号的信息
NF 表示列号的信息

print:输出指定的信息
gusb : 替换指定的信息   gawk substitute -- gsub
       gsub(// , "" , $x) --> gsub (/要替换的信息) 
       gusb(/:/ ,"$",)
说明:NF表示列信息,$NF表示最后一列, ?倒数第二列   == $3
$NF == $4 - 1 
oldboy  linux  edu       50 
$(NF-1)  ($NF)
$(4-1)    $4    $4==$NF==50  $NF-1==50-1=49
总结:
awk用到参数: -F 指定列分隔符号
awk用到的动作: print 指定输出的信息
                gsub  替换指定的信息
awk内置的变量: NR    表示行号的信息
                NF    表示列号的信息

特殊模式
BEGIN: 在文件处理之前完成相应操作
[root@linux67 oldboy]# awk 'BEGIN{print "姓","名","ID","捐款记录"}{print 0}' awk_test.txt |column -t 姓 名 ID 捐款记录 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 918391635 :250:100:175 特殊模式 BEGIN: 在文件处理之前完成相应操作 [root@linux67 oldboy]# awk 'BEGIN{print "姓","名","ID","捐款记录"}{print0}' awk_test.txt |column -t
姓 名 ID 捐款记录
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 918391635 :250:100:175

   作用: 
   1) 可以实现数值运算  --- 计算器
      [root@linux67 oldboy]# awk 'BEGIN{print 2+3}'
      5
      [root@linux67 oldboy]# awk 'BEGIN{print 2-3}'
      -1
      [root@linux67 oldboy]# awk 'BEGIN{print 2*3}'
      6
      [root@linux67 oldboy]# awk 'BEGIN{print 2^3}'
      8
      [root@linux67 oldboy]# awk 'BEGIN{print 2/3}'
      0.666667  
   
   2) 可以实现变量设置
   [root@linux67 oldboy]# awk 'BEGIN{name="oldgirl"}$2~/Xiaoyu/{print name,$1,$2}' awk_test.txt 
   oldgirl Zhang Xiaoyu
   [root@linux67 oldboy]# awk 'BEGIN{name="oldgirl"}$2~/Xiaoyu/{print "name",$1,$2}' awk_test.txt 
   name Zhang Xiaoyu
   
   [root@linux67 oldboy]# awk -F "[ :]+" '$1~/Zhang/{print $1,$2,$5}' awk_test.txt 
   Zhang Dandan 100
   Zhang Xiaoyu 90
   [root@linux67 oldboy]# awk  'BEGIN{FS="[ :]+"}$1~/Zhang/{print $1,$2,$5}' awk_test.txt 
   Zhang Dandan 100
   Zhang Xiaoyu 90
   [root@linux67 oldboy]# awk -vFS="[ :]+" '$1~/Zhang/{print $1,$2,$5}' awk_test.txt 
   Zhang Dandan 100
   Zhang Xiaoyu 90
   
   内置变量:
   NR : 表示行的信息
   NF : 表示列的信息
   FS : 表示指定分隔符号
      
 `3) 可以实现信息统计
      如何进行累加运算  -->  i=i+1   初始i=0  经过一次运算 i=1  经过运算 i=2

相关文章

  • 2019-07-25

    操作系统命令三剑客-awk 一: 三剑客命令awk概述gawk : pattern scanning and pr...

  • Day19操作系统三剑客命令-awk

    01.三剑客awk命令概念介绍、* 02.三剑客awk命令使用方法 print:输出指定的信息gusb : 替换指...

  • 2019-06-19

    1. awk三剑客命令概述 # which awk--------查看awk在哪个目录下 显示: /u...

  • day 19三剑客awk

    三剑客命令awk概述:gawk:pattern scanning and processing language ...

  • D19-操作系统awk命令

    一、三剑客命令awk概述 gawk : pattern scanning and processing langu...

  • Shell编程、part5

    本节内容 1. 三剑客简介 2. sed命令详解 3. awk命令详解 文本处理三剑客 在 Shell 下使用这些...

  • Linux命令总结

    linux三剑客awk、grep、sed应用环境即常用命令 linux常用命令链接 https://man.lin...

  • 实际案例讲解Linux三剑客awk命令!

    说起Linux系统,相比大家一定听过Linux三剑客,它们是grep、sed、awk命令,awk是一个强大的文本分...

  • Linux系统中awk和sed有什么区别?

    Linux文本三剑客,即awk、grep、sed,这三个命令是Linux中常用的文本处理命令,主要作用是对文本内容...

  • day14 预习笔记

    awk(Linux三剑客之一) awk不仅仅是Linux系统中的一个命令,而是一种编程语言,可以用来处理数据和生成...

网友评论

    本文标题:Day19操作系统三剑客命令-awk

    本文链接:https://www.haomeiwen.com/subject/ouvubctx.html