zoukankan      html  css  js  c++  java
  • awk基础01-基本用法

    什么是awk

        awk 是一门解释型的编程语言,支持条件判断,数组、循环等功能。可用于文本处理、输出格式化的文本信息、执行数学运算、字符串等操作。
        awk在处理文件时按进行逐行处理,即每次处理输入的一整行,完成后再处理下一行,如此循环直到全部处理完毕,默认以换行符作为一行的终结。而在一行中又默认使用空格做为每一列的分隔符,将一行分割为多列。如下所示:

    awk01.jpg

    $0:代表输入的一整行
    $1~$n:代表一行被分割后的列序号,$1则代表为第一列,依次类推
    

    工作原理

    • 第一步
        awk读取一条记录作为输入,并将这条记录传递给内部变量 $0
    • 第二步
        记录被分隔符分割成多个字段,每一个字段被存储到指定编号的变量中,从 $1 开始。可使用 -F 指定分隔符,awk默认分隔符为空格
    • 第三步
        对于每一条记录,按照给定的pattern进行匹配,匹配成功则执行对应的action,匹配失败,则不执行action。
    • 第四步
        重复第1~3步直到结束

    基本语法

    awk [options] 'Pattern { Action }' File
    

    常用选项

    常用选项如下所示:

    选项 说明
    -F fs 指定分隔符
    -v var=val 自定义定义变量并进行赋值
    -f program-file 从文件中读入操作
    -r,--re-interval 支持以{x,y}的正则匹配
    -h 显示帮助信息

    Pattern

        awk 中模式可以理解为在处理文本行前需要满足的条件,如果满足则进行处理。常用的模式(Pattern)如下所示:

    • BEGIN { 语句 }:指定在处理文本之前需要进行的操作
    • END { 语句 }: 指定在文件文本之后需要进行的操作
    • 表达式 { 语句 }:对于表达式为真时需要进行的操作
    • /正则表达式/ { 语句 }:对正则表达式能匹配的结果需要进行的操作

    如果遇到 / ,则需要进行转义操作,使用 /
    如果正则需要使用{x,y},则需要使用
    --posix
    --re-interval选项

    • 组合模式 { 语句 }:通过与(&&)、或(||)和非(|)或者{}组合的多个表达式,需要进行的操作
    • 模式1,模式2 { 语句 }:范围模式(range pattern) 匹配从与模式1匹配的行到与模式2相匹配的行(包含该行)之间所有的行需要进行操作

        awk 支持的条件运算符如下所示:

    运算符 含义 示例
    < 小于 x < y
    <= 小于等于 x <= y
    > 大于 x > y
    >= 大于等于 x >= y
    == 等于 x == y
    != 不等于 x != y
    ~ 与正则匹配则为真 x ~/正则/
    !~ 与正则不匹配则为真 x !~/正则/

    1、常规用法:

    awk02.jpg

    2、正则表达式用法:

    awk03.jpg

    Action

        awk 中的操作(Action)其主要作用是对符合模式的数据进行的命令操作,如显示打印等。最常用的就是print。

    Action的 { } 必须与其对应的模式处理同一行

    Action常用组合方式如下所示:

    • 方式一:在这种方式中,各个动作间是顺序执行,即执行完成第一个动作后,再执行第二个,等最后一个动作执行完成后,再重复第一个动作,如此循环直到结束。因此输出的结果也是每个动作一行

    awk '{print $1} {print $2}'

    • 方式二:执行效果同方式一

    awk '{print $1 ; print $2}'

    • 方式三:将所的输出结果全部打印输出到一行上面

    awk '{print $1 , $2}'

    以上三种用法示例如下所示:

    awk04.jpg

    本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:
    MyQRCode.jpg

  • 相关阅读:
    HDU 2089 不要62
    HDU 5038 Grade(分级)
    FZU 2105 Digits Count(位数计算)
    FZU 2218 Simple String Problem(简单字符串问题)
    FZU 2221 RunningMan(跑男)
    FZU 2216 The Longest Straight(最长直道)
    FZU 2212 Super Mobile Charger(超级充电宝)
    FZU 2219 StarCraft(星际争霸)
    FZU 2213 Common Tangents(公切线)
    FZU 2215 Simple Polynomial Problem(简单多项式问题)
  • 原文地址:https://www.cnblogs.com/surpassme/p/9637955.html
Copyright © 2011-2022 走看看