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

  • 相关阅读:
    yii框架原生代码
    分库分表
    get和post的区别
    echo print() print_r() var_dump()的区别
    cookie 和session 的区别
    memcached 常用命令及使用说明
    解决高并发
    C# 使用NLog记录日志
    CREATE DATABASE permission denied in database 'master'.
    No 'Access-Control-Allow-Origin' header is present on the requested resource.
  • 原文地址:https://www.cnblogs.com/xmphoenix/p/2280523.html
Copyright © 2011-2022 走看看