zoukankan      html  css  js  c++  java
  • awk基础命令

    1. 命令awk简介

          a. awk是一种编程语言,用于对文本和数据进行处理。

          b.具有强大得文本格式话能力

          c.利用命令awk,可以将一些文本整理成需要的格式。

          d.命令awk是逐行进行处理的

    2. grep、sed、awk的简单比较

        a. grep适合单纯的查找或者匹配文本

        b. sed  适合匹配到的文本进行编辑

        c. awk适合文本格式化,对文本进行比较复杂的格式处理

    3. awk基本语法

      awk [options] 'program ' file1,file2

        对于上述语法中的program来说,可以细分未pattern和action,也就是说,wak的基本语法如下:

        awk [options] 'pattern {action}' file action是指动作,awk擅长文本格式化,并且将格式化以后的文本输出。所以awk最常用的动作就是print和printf,因为awk要把格式化完成后的文本输出,所以常用。

       例子1: 不使用[options] 也不指定pattern,直接使用action

    例子2:不使用options 和 pattern,输出df信息的 第5列信息,$5表示将当前行按照分隔符分割后的第5列,不指定分隔符时,默认使用空格作为分隔符

    例子3:$0表示整行,$NF表示当前分割后的最后一行 ($0和$NF均为内置变量)

    注意:$NF表示分割后最后一个字段 ; NF表示当前行被分隔符切开后,一共几个字段。

    a. 取最后一个列的数据

     

    b. df命令被分割后,分割成6列, NF=6, 取倒数第二列数据

     

    例子4:可以添加字段,将字段与文件中的列结合起来

     

    例子5:AWK包含2种特殊的模式:

    BEGIN 和 END BEGIN 表示指定的动作 需要在处理指定的文本(print $1,$2)之前执行。

    END 表示在处理完所有指定的文本后,需要指定动作。

     awk 分隔符

    awk默认的分隔符是空格,这样描述并不精确,因为awk的分隔符还分两种,“输入分隔符” 和 “输出分隔符”。

    输入分隔符,简称FS, 默认是空白字符,awk默认以空白字符为分隔符,对每一行进行分割。

    输出分隔符,简称OFS,awk将每行分割后,输出在屏幕上,以什么字符作为分隔符,awk默认的输出分隔符也是空格。

    例子1:

    输入分隔符:当awk逐行处理文本时,以输入的分隔符为准,将文本切成多个片段,默认用空格。若一段文字中没有空格,可以指定以特定的文字或符号作为输入分隔符。

    指定使用 #作为输入分隔符。

     例子2:不管是通过-F选项,还是通过FS内置变量,目的都是设置指定的输入分隔符

    输出分隔符:当要对处理完的文本进行输出的时候,以什么文本或者符合作为分隔符。

    当awk输出每一列的时候,会使用空格隔开每一列,其实,这个空格,就是awk的默认输出分隔符。

    通过内置变量OFS设定awk的输出分隔符,使用变量时需要配合-v选项。

     a. 先通过输入分隔符FS='#'进行分割

     b.再通过输出分隔符OFS='++++',对#分割后的结果进行处理

     

    扩展:

     awk 变量

    常用内置变量:

    FS:输入字段分隔符,默认为空白字符
    OFS: 输出字段分隔符,默认为空白字符
    RS:输入记录分隔符(输入换行符),指定输入时的换行符
    ORS:输出记录分隔符(输出换行符),输出时用指定符号代替换行符
    NF: 当前行的字段格式(即当前行被分割成了几列),字段数量
    NR:行号,当前处理的文本行的行号
    FNR:各文件分别计数的行号
    FILENAME: 当前文件名
    ARGC: 命令行参数的个数
    ARGV:数组,保存的是命令行所给定的各参数

    内置变量NR:

    NR:表示每一行的行号;NF:表示每一行中一共有几列

    注意:在awk中,只要引用$0,$1,$2等内置变量时才使用$,引用其他变量时,不管是内置变量,还是自定义变量,都不用$,直接使用变量名。

    其他内置变量参考:http://www.zsythink.net/archives/1374

    自定义变量:

    第一种方法: 通过-v 设置变量 myvar="testvar"

    第二种方法: 直接在program中定义即可,注意: 变量定义与动作之间需要用 分号隔开

    第三种:

     awk格式化

    print动作,处理文本时,默认换行

    printf动作,处理文本时,不会换行,默认将文本输出在一行里面

    awk在printf动作使用时需要注意:

    1. 使用 printf 动作输出的文本不会换行,如果需要换行,可以在对应的“格式替换符”后加入“ ”进行转义。

    2.使用 printf 动作时,“指定的格式” 与 “被格式化的文本”之间,需要用 逗号隔开。

    3. 使用 printf 动作时,“格式”中的“格式替换符” 必须与 “被格式化的文本” 一一对应。

    例子如下:

    先使用awk对文本进行切割,再使用printf动作负责格式文本

     awk 模式(条件)

    下列条件,都使用了关系表达式,比如 ==, <= ,> 等,当经过关系运算得出的结果为真时,则满足条件,会执行相应的动作。

    给定一个文本文件file.txt,请只打印这个文件中的第10行。 (多种解法)

     解法1:

     解法2:

    解法3:

    #!/bin/bash
    count=`cat file.txt |wc -l`
    out=`cat file.txt |head -10 |tail -l`
    if [$count -lt 10]
    then 
        echo ""
    else echo $out
    fi

    awk支持以下关系运算符。

    awk的模式还有其他方式:

    1. 空模式,没有指定任何“模式”的情况

    2. 关系运算模式

    3. BEGIN/END模式

     未完待续~~~

     参考:http://www.zsythink.net/archives/tag/awk/page/2/

  • 相关阅读:
    json
    网页版 treeview使用中遇到的问题
    随机获取一条数据
    oracle
    发送邮件
    DataGrid列的合并
    python简介
    SQLSERVER
    Maven 基础
    Maven 构建jar包
  • 原文地址:https://www.cnblogs.com/lhly/p/10491815.html
Copyright © 2011-2022 走看看