zoukankan      html  css  js  c++  java
  • linux基础学习-18.2-awk模式和动作

    1、基本的模式和动作

    [root@oldboy ~]# awk -F ":" 'NR>=2 && NR<=6{print NR,$1}' /etc/passwd
    2 bin
    3 daemon
    4 adm
    5 lp
    6 sync
    

    命令说明:

    -F 指定分隔符为冒号,相当于以“:”为菜刀,进行字段的切割。

    NR>=2 && NR<=6:这部分表示模式,是一个条件,表示取第2行到第6行。

    {print NR,$1}:这部分表示动作,表示要输出NR行号和$1第一列。

    2、只有模式

    [root@oldboy ~]# awk -F ":" 'NR>=2&&NR<=6' /etc/passwd
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    

    命令说明:

    -F指定分隔符为冒号

    NR>=2&&NR<=6这部分是条件,表示取第2行到第6行。

    但是这里没有动作,这里大家需要了解如果只有条件(模式)没有动作,awk默认输出整行

    3、只有动作

    [root@oldboy ~]# awk -F ":" '{print NR,$1}' /etc/passwd
    1 root
    2 bin
    3 daemon
    4 adm
    5 lp
    6 sync
    7 shutdown
    8 halt
    9 mail
    10 uucp
    以下省略....
    

    命令说明:

    -F指定分隔符为冒号

    这里没有条件,表示对每一行都处理

    {print NR,$1}表示动作,显示NR行号与$1第一列

    这里要理解没有条件的时候,awk会处理每一行。

    4、多个模式和动作

    [root@oldboy ~]# awk -F ":" 'NR==1{print NR,$1}NR==2{print NR,$NF}' /etc/passwd
    1 root
    2 /sbin/nologin
    

    命令说明:

    -F指定分隔符为冒号

    这里有多个条件与动作的组合

    NR==1表示条件,行号(NR)等于1的条件满足的时候,执行{print NR,$1}动作,输出行号与第一列。

    NR==2表示条件,行号(NR)等于2的条件满足的时候,执行{print NR,$NF}动作,输出行号与最后一列($NF)

    注意:

    Pattern和{Action}需要用单引号引起来,防止shell作解释。

    Pattern是可选的。如果不指定,awk将处理输入文件中的所有记录。如果指定一个模式,awk则只处理匹配指定的模式的记录。

    {Action}为awk命令,可以是但个命令,也可以多个命令。整个Action(包括里面的所有命令)都必须放在{ 和 }之间。

    Action必须被{ }包裹,没有被{ }包裹的就是Patern

    file要处理的目标文件

    5、awk执行过程

    在深入了解awk前,我们需要知道awk如何处理文件的。

    示例1-5 示例文件的创建

    [root@oldboy ~]# mkdir /server/files/ -p

    [root@oldboy ~]# head /etc/passwd > /server/files/awkfile.txt

    [root@oldboy ~]# cat /server/files/awkfile.txt

    rootx0:0:root:/root:/bin/bash

    binx1:1:bin:/bin:/sbin/nologin

    daemonx2:2:daemon:/sbin:/sbin/nologin

    admx3:4:adm:/var/adm:/sbin/nologin

    lpx4:7:lp:/var/spool/lpd:/sbin/nologin

    syncx5:0:sync:/sbin:/bin/sync

    shutdownx6:0:shutdown:/sbin:/sbin/shutdown

    haltx7:0:halt:/sbin:/sbin/halt

    mailx8:12:mail:/var/spool/mail:/sbin/nologin

    uucpx10:14:uucp:/var/spool/uucp:/sbin/nologin

    这个文件仅包含十行文件,我们使用下面的命令:

    示例1-6 awk执行过程演示

    [root@oldboy ~]# awk 'NR>=2{print $0}' /server/files/awkfile.txt

    binx1:1:bin:/bin:/sbin/nologin

    daemonx2:2:daemon:/sbin:/sbin/nologin

    admx3:4:adm:/var/adm:/sbin/nologin

    lpx4:7:lp:/var/spool/lpd:/sbin/nologin

    syncx5:0:sync:/sbin:/bin/sync

    shutdownx6:0:shutdown:/sbin:/sbin/shutdown

    haltx7:0:halt:/sbin:/sbin/halt

    mailx8:12:mail:/var/spool/mail:/sbin/nologin

    uucpx10:14:uucp:/var/spool/uucp:/sbin/nologin

    命令说明:

    条件NR>=2,表示行号大于等于2时候,执行{print $0}显示整行。

    awk是通过一行一行的处理文件,这条命令中包含模式部分(条件)和动作部分(动作),awk将处理模式(条件)指定的行

    练习题:

    1、什么是模式

    2、什么是动作

    3、awk的执行过程

  • 相关阅读:
    DbEntry——学习笔记(二)
    新的开始
    Jquery Dialog的使用
    使用System.Net.Mail.MailMessage 来发送邮件
    三层架构中的"业务逻辑层"
    Ajax请求中的async:false/true的作用
    1
    招聘会项目的开发
    操作全角与半角(C#)
    sqlserver把数据库中的表完整的复制到另一个数据库
  • 原文地址:https://www.cnblogs.com/Klanti/p/9143642.html
Copyright © 2011-2022 走看看