文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

awk命令(1)

2024-04-02 19:55

关注

一、awk的优点和缺点:

优点:1.awk用来取列,单独取列简单方便

      2.awk支持正则表达式

      3.awk支持变量

      4.awk支持&&和||

      5.awk支持流程控制语句,如if 和if/else 条件控制

      6.awk支持循环,如while、do-while和for循环

      7.awk支持用于跳转或者退出的命令break、continue、next 和exit等

      8.awk支持函数

缺点:awk功能强大,相对来说较复杂


二、awk的命令格式:

awk '条件1 {动作1} 条件2 {动作2}...' file.txt


三、awk的用法:

1.打印匹配root的行

[root@localhost ~]# awk '/root/' /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin


2.-F选项的作用

2.1以冒号分隔,打印第一列数据;不加-F选项,默认是空格,冒号可以自定义

[root@localhost ~]# awk -F: '{print $1,$3,$5,$7}'  /etc/passwd

root 0 root /bin/bash

bin 1 bin /sbin/nologin

daemon 2 daemon /sbin/nologin

...


2.2 -F自定义分隔符,分隔数据

[root@localhost ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/VolGroup00-LogVol00

                       57G  7.2G   47G  14% /

/dev/sda1              99M   12M   82M  13% /boot

tmpfs                 252M     0  252M   0% /dev/shm


[root@localhost ~]#  df -h |grep /$ |awk '{print $4}' |awk -F"%" '{print $1}' 

14


2.3cut命令同样实现

[root@localhost ~]#  df -h |grep /$ |awk '{print $4}' |cut -d"%" -f 1 

14


2.4打印列的时候,逗号来分隔列

[root@localhost ~]# awk -F: '/root/{print $1 $3 $5 $7}' /etc/passwd

root0root/bin/bash

operator11operator/sbin/nologin


[root@localhost ~]# awk -F: '/root/{print $1,$3,$5,$7}' /etc/passwd

root 0 root /bin/bash

operator 11 operator /sbin/nologin


2.5打印列的时候,#来分隔列

[root@localhost ~]# awk -F: '/root/ {print $1"###"$7"###"$3}' /etc/passwd

root###/bin/bash###0

operator###/sbin/nologin###1


3.BEGIN和END的用法

3.1BEGIN的用法

[root@localhost ~]# df -h |grep /$ |awk '{print $4}' |awk -F"%" 'BEGIN{print "root_usage!"} {print $1}' 

root_usage!

14


3.2BEGIN和END一起用,\n用来换行

[root@localhost ~]# df -h |grep /$ |awk '{print $4}' |awk -F"%" 'BEGIN{print "\nroot_usage!"  "\n==========="} {print $1}  END{print"==========="}' 


root_usage!

===========

14

===========


4.FS、OFS、NR、NF的用法 

4.1FS等同于-F,以冒号分隔列

[root@localhost ~]# awk  'BEGIN{FS=":"} /root/ {print $1,$3,$5,$7}' /etc/passwd

root 0 root /bin/bash

operator 11 operator /sbin/nologin


4.2OFS改变默认分隔符,用#号分隔列

[root@localhost ~]# awk  -F: 'BEGIN{OFS="###"} /root/ {print $1,$3,$5,$7}' /etc/passwd

root###0###root###/bin/bash

operator###11###operator###/sbin/nologin


-v选项也可以实现

[root@localhost ~]#  awk  -F: -v OFS="###" '/root/ {print $1,$3,$5,$7}' /etc/passwd

root###0###root###/bin/bash

operator###11###operator###/sbin/nologin


4.3分号的用法

[root@localhost ~]# awk 'BEGIN {FS=":";OFS="#"} /root/ {print $1,$7}' /etc/passwd

root#/bin/bash

operator#/sbin/nologin


4.4NR用来打印行号,而且列可以自定义位置打印

[root@localhost ~]# awk -F: '/root/ {print NR,$1,$7,$5,$3}' /etc/passwd

1 root /bin/bash root 0

12 operator /sbin/nologin operator 11


[root@localhost ~]# awk '/root/ {print NR,$0}' /etc/passwd

1 root:x:0:0:root:/root:/bin/bash

12 operator:x:11:0:operator:/root:/sbin/nologin


4.5打印空行

[root@localhost ~]#awk '/^$/{print NR}' /etc/passwd



4.6这两个命令等效,但grep的效率更高

[root@localhost ~]# awk '/root/ {print NR,$0}' /etc/passwd

1 root:x:0:0:root:/root:/bin/bash

12 operator:x:11:0:operator:/root:/sbin/nologin


[root@localhost ~]# grep -n 'root' /etc/passwd

1:root:x:0:0:root:/root:/bin/bash

12:operator:x:11:0:operator:/root:/sbin/nologin


4.7NF用来打印列数,NF打印出有7列,$NF打印出最后一列

[root@localhost ~]# awk -F: '/root/ {print NR,NF,$NF,$0}' /etc/passwd

1 7 /bin/bash root:x:0:0:root:/root:/bin/bash

12 7 /sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin


5.awk中的比较

<

<=

>

>=

== 等于

!=不等于

~匹配

!~不匹配


5.1打印大于等于37行的第一列

[root@localhost ~]#  awk -F: 'NR>=37 {print NR,$1}' /etc/passwd

37 xfs

38 gdm

39 pegasus

40 oracle


5.2打印大于等于60的第四列

[root@localhost shell]#cat awk.txt 

1    80 1  li

2  60   2  wang

3  70   3  zhang

4  10     4  zhao

[root@localhost shell]# awk '$2>=60 {print $4}' awk.txt

li

wang

zhang


5.3打印第一列匹配root的字段

[root@localhost ~]# awk -F: '$1=="root" {print $1,$3,$5,$7}' /etc/passwd

root 0 root /bin/bash


5.4打印全文匹配root的字段

[root@localhost ~]# awk -F: '$0~/root/ {print NR,$1,$7,$5,$3}' /etc/passwd

1 root /bin/bash root 0

12 operator /sbin/nologin operator 11


5.5打印第六列匹配root的字段

[root@localhost ~]# awk -F: '$6 ~/root/{print $1,$5,$6}' /etc/passwd

root root /root

operator operator /root


5.6打印第七行到第十二行中的字段

[root@localhost /]# awk -F : 'NR==7,NR==12 {print NR,$1,$7}' /etc/passwd

7 shutdown /sbin/shutdown

8 halt /sbin/halt

9 mail /sbin/nologin

10 news 

11 uucp /sbin/nologin

12 operator /sbin/nologin


6.if判断

6.1第一列等于root就打印

[root@localhost ~]# awk -F: '{if($1=="root")print $0}' /etc/passwd

root:x:0:0:root:/root:/bin/bash


6.2打印第一列匹配oracle的行

[root@localhost ~]# cat /etc/passwd |awk '{if($1 ~ "oracle") print NR,$0}'

40 oracle:x:500:501::/home/oracle:/bin/bash


6.3打印最后一列匹配bash的行

[root@localhost ~]# awk -F: '{if($NF~/bash/)  print NR,$1,$NF}' /etc/passwd

1 root /bin/bash

31 postgres /bin/bash

35 mysql /bin/bash

40 oracle /bin/bash

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯