awk用法

    awk被设计用于数据流,它可以对列和行进行操作,awk有很多内建的功能,比如数组、函数等,它和C语言有相同之处。灵活性是awk最大的优势。
    awk脚本的结构基本如下:
    awk ‘BEGIN{ print “start”} pattern { commands } END { print “end” }’ file
    一个awk脚本通常由3个部分组成:BEGIN语句块、END语句块和能够使用模式匹配的通用语句块。这3个部分是可选的,它们中任何一个部分都可以不出现在脚本中。脚本通常会被包含在单引用或双引号中

    工作原理
    1) 执行BEGIN { comands } 语句块中的语句
    2) 从文件或stdin中读取一行,然后执行patern { commands }。重复这个过程,知道文件全部被读取完毕
    3) 当读至输入流末尾时,执行END { commands } 语句块
    BEGIN语句块在awk开始从输入流中读取行之前被执行。这是一个可选的语句块,如变量初始化、打印输出表格的表头等语句通常都可以写入BEGIN语句块中
    END语句块和BEGIN语句块类似。END语句块在awk从输入流中读取完所有的行之后即被执行。像打印所有行分析结果这类汇总信息,都是在END语句块中实现的常见任务。它也是一个可选的语句块
    最重要的部分就是pattern语句块中的通用命令。这个语句块同样是可选的。如果不提供该语句块,则默认执行{ print },即打印每一个读取到的行。awk对于读取的每一行,都会执行这个语句块
    这就像一个用来读取行的while循环,在循环体中提供了相应的语句
    每读取一行时,它就会检查该行和提供的样式是否匹配。样式本身可以是正则表达式、条件以及行匹配范围等。如果当前行匹配该样式,则执行{ }中的语句
    样式是可选的。如果没有提供样式,那么它就会默认所有的行都是匹配,并执行{ }中的语句

    以下是可以用于awk的一些特殊变量
    ARGC: 命令行变元个数
    ARGV: 命令行变元数组
    FILENAME: 当前输入文件名
    FNR: 当前文件中的记录号
    OFS: 输出域分隔符
    ORS: 输出记录分隔符
    FS: 输入域分隔符,默认为一个空格
    RS: 输入记录分隔符
    NR: 表示记录数量(number of records),在执行过程中对应于当前行号
    NF:表示字段数量(number of fields),在执行过程中对应于当前行的字段数
    S0:这个变量包含执行过程中当前行的文本内容
    S1:这个变量包含第一个字段的文本内容
    S2:这个变量包含第二个字段的文本内容

    • 本文由 发表于 2012-03-07
    • 转载请务必保留本文链接:https://linuxeye.com/105.html
    读《sed与awk》第1~3章笔记 脚本

    读《sed与awk》第1~3章笔记

    sed、awk功能 sed 在一个或多个文件上自动实现编辑操作 简化对多个文件执行相同的编辑处理工作 编写转换程序 awk 将文本文件看做由记录和字段组成的文本数据库 使用变量操作数据库 使用算术和字...
    读《Linux Shell脚本攻略》第8章笔记 脚本

    读《Linux Shell脚本攻略》第8章笔记

    1. du -a:递归地输出指定目录或多个目录中所有文件的统计结果 -h:以KB、MB或块(block)为单位显示磁盘使用情况 -c:显示磁盘使用总计 -s:只输出合计数据(summarize) –e...
    匿名

    发表评论

    匿名网友