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的执行过程

  • 相关阅读:
    How to create jar for Android Library Project
    Very large tabs in eclipse panes on Ubuntu
    64bit Ubuntu, Android AAPT, R.java
    Linux(Ubuntu)下如何安装JDK
    Configure xterm Fonts and Colors for Your Eyeball
    建立、配置和使用Activity——启动其他Activity并返回结果
    建立、配置和使用Activity——使用Bundle在Activity之间交换数据
    建立、配置和使用Activity——启动、关闭Activity
    建立、配置和使用Activity——Activity
    异步任务(AsyncTask)
  • 原文地址:https://www.cnblogs.com/Klanti/p/9143642.html
Copyright © 2011-2022 走看看