• awk命令


    可以对列和行进行操作,awk有很多内建功能,比如数组,函数等。

    结构:

    #########################################################################
    # File Name: awk.sh
    # Author: lizhen
    # mail: lizhen_ok@163.com
    # Created Time: Wed 18 May 2016 09:48:10 PM CST
    #########################################################################
    #!/bin/bash
    awk '
    BEGIN{
        i=0
    }
    {
        i++
    }
    END{
        print i
    }
    ' n

    echo $?

    awk由3部分构成,begin,end和带模式匹配选项常见语句块。注意这三部分都是被包含在单引号‘  ’或双引号“ ”之间的。

    ============

    执行步骤:

    1,执行BEGIN {commands}语句块中的语句

    2,从文件或stdin中读取一行,然后执行pattern  {commands},重复这个过程,直到文件全部读取完毕

    3,到读到输入流末尾时,执行END {commands}语句块

    BEGIN语句块和END语句块都是可选的,BEGIN语句块在开始从输入流中读取行之前执行,常做的工作由变量初始化,打印输出表格等等

    END语句块是在从输入流读取完所有的行之后即被执行的行,通常做些扫尾工作。

    pattern语句块,可选。如果没有这个语句块,默认是{print },就是打印读取到的一行;awk对于每一行,都会执行这个语句块,就像一个读取行的while循环,在循环体提供了相应的语句。

    print语句:当不带参数时,打印输出当前行

    当print的参数是以逗号进行分隔时,参数打印时则以空格作为定界符

    在print语句中,双引号是被当作拼接符号使用的。

    [lizhen@dhcp-128-93 shell]$ echo | awk '{var1="v1";var2="v2"; print var1,var2}'
    v1 v2
    [lizhen@dhcp-128-93 shell]$ echo | awk '{var1="v1";var2="v2"; print var1 "-" var2}' 
    v1-v2
    [lizhen@dhcp-128-93 shell]$ 

    ===========

    特殊变量

    NR  当前的记录数量,就是执行过程当前行号

    NF  字段数量,对应于当前行的字段数量

    $0 这个变量包含执行过程中当前行的文本内容副本

    $1  第一个字段的文本内容

    $2  第二个字段的文本内容3

    awk中printf()函数的语法与c语言中的同名函数一样,可以代替print

    =====

    将外部变量值传递给awk,使用-v选项

    [lizhen@dhcp-128-93 shell]$ var=1000
    [lizhen@dhcp-128-93 shell]$ echo | awk -v VAR=$var '{print VAR}'
    1000
    [lizhen@dhcp-128-93 shell]$ 

    或者利用  从文件读取的思路:如下

    [lizhen@dhcp-128-93 shell]$ var1="var1111";var2="var2222"
    [lizhen@dhcp-128-93 shell]$ echo | awk '{print v1,v2}' v1=$var1 v2=$var2
    var1111 var2222
    [lizhen@dhcp-128-93 shell]$ 

    3,使用getline读取行,getline var   ##var包含特定行的内容

    awk默认读取一个文件的所有行,如果只想读取某一行,可以使用getline函数

    有时候我们需要在BEGIN语句块中读取第一行

    [lizhen@dhcp-128-93 shell]$ seq 5 | awk 'BEGIN {getline; print "read ahead first line", $0} {print $0}'
    read ahead first line 1
    2
    3
    4
    5
    [lizhen@dhcp-128-93 shell]$ 

    4,使用过滤模式对awk处理行进行过滤

    8,最重要的就是awk内建的字符串控制函数了

    length(string)

    index(string,search_string)

    split(string,array,delimiter)

    substr(string,start-position,end-position)

    sub(regex,replacement_str,string_

    gsub(regex,replacement_str,string)

    match(regex,string)

  • 相关阅读:
    03人脉搜索:学会这一招,就能轻松找到90%的人的联系方式
    02 资源搜索-全面、快速查找全网你想要的任何信息、情报
    01信息搜索:全面、快速查找全网你想要的任何信息、情报.
    ansible笔记(12):handlers的用法
    ansible笔记(11):初识ansible playbook(二)
    ansible笔记(10):初识ansible playbook
    ansible笔记(9):常用模块之包管理模块
    ansible笔记(8):常用模块之系统类模块(二)
    ansible笔记(7):常用模块之系统类模块
    ansible笔记(6):常用模块之命令类模块
  • 原文地址:https://www.cnblogs.com/li-daphne/p/5506944.html
Copyright © 2020-2023  润新知