zoukankan      html  css  js  c++  java
  • 文本编辑神器awk

    一、shell下面直接处理awk命令

    awk '{print $0}' file       

    awk '/^(11+?)\1+$/ {print $0}' file    //著名的判断是否为素数的正则

    上面两个命令都是直接可以在shell下执行的命令,基本模式是 awk pattern { action } file,就是说awk会一行一行的从file中读取文本,然后判断pattern是否满足,如果满足则执行action。

    二、awk脚本的基本结构

    BEGIN{}   //awk的前奏,一般会在这里初始化变量、读取命令参数、设定分隔符

          {}     //awk的主体部分,这里主要是一行一行的从文本文件中读取数据,执行命令

    END{}     //这是awk的收尾部分,这时awk已经从文本文件中读取完所有数据,这时可以执行一些对结果的统计啊之类的工作

    awk主体部分的执行流程:

    1.从文本文件中读取一行数据

    2.更新awk内置变量,如$0,NR,NF等

    3.依次执行主体部分的命令

    4.若文本文件中还有未读取完的数据,继续循环1-4的流程

    在shell中执行awk脚本的命令是: awk -f test.awk -v arg1=9 -v arg2=8 ... file

    -f 指定脚本文件,每一个-v指定一个命令参数

    三、awk的基本命令

    I/O命令: print 这个是打印后换行     printf  这个打印后不换行   getline 从文件中读取一行数据

    如awk '{print $1}' file  打印file文件的第一列

       awk '{printf $2}' file 将file文件的第二列打印为一行

    getline 的命令格式为:

    getline varable <  file 这样file的一行数据保存入变量varable中

    如果是getline < file 省略varable,则数据保存到$0中

    流程控制命令: if(...){} else{}, for(...){}, while(...){} 这个跟C差不多

    四、awk的内置变量

    ARGC  命令参数的个数

          ARGV  保存命令参数的数组

    FNR 已经读入的记录数

    FS 分割为记录的分隔符

    OFS  输出时的分隔符

    NF 当前行的记录数

    NR 已经读入的行数

    $0 记录当前读入的行,$1 $2 $3 ... 记录分隔后的字段

    五、awk脚本调用shell命令

    awk 'BEGIN{"ls" | getline}' file

    六、awk应用

    之前百度面试的时候有道题目是打印文本文件的奇数行,当时不知道awk,还用一个全局变量去记录换行符,挺麻烦的。用awk一行代码就OK了

    awk 'NR%2==1 {print $0}' file

  • 相关阅读:
    MongoDB 分片机制
    MongoDb的“not master and slaveok=false”错误及解决方法
    MongoDB 副本集复制配置
    spring,mybatis整合配置文件
    Tomcat-正统的类加载器架构
    CSS3系列三(与背景边框相关样式 、变形处理、动画效果)
    如果您想省略JS里的分号,了解一下JS的分号插入原理吧
    CSS3系列二(媒体支持、文字与字体相关样式、盒相关样式)
    CSS3系列一(概述、选择器、使用选择器插入内容)
    HTML5系列四(WebWorker、地理定位)
  • 原文地址:https://www.cnblogs.com/xmphoenix/p/2280523.html
Copyright © 2011-2022 走看看