zoukankan      html  css  js  c++  java
  • awk 工具

    21.1.3

    扩展正则表达式

    RE 字符 意义与范例
    + 意义:重复『一个或一个以上』的前一个 RE 字符 范例:搜寻 (god) (good) (goood)... 等等的字串。 那个 o+ 代表『一个以上的 o 』所以,底下的运行成果会将第 1, 9, 13 行列出来。egrep -n 'go+d' regular_express.txt
    ? 意义:『零个或一个』的前一个 RE 字符 范例:搜寻 (gd) (god) 这两个字串。 那个 o? 代表『空的或 1 个 o 』所以,上面的运行成果会将第 13, 14 行列出来。 有没有发现到,这两个案例( 'go+d' 与 'go?d' )的结果集合与 'go*d' 相同? 想想看,这是为什么喔! _egrep -n 'go?d' regular_express.txt
    | 意义:用或( or )的方式找出数个字串 范例:搜寻 gd 或 good 这两个字串,注意,是『或』! 所以,第 1,9,14 这三行都可以被列印出来喔!那如果还想要找出 dog 呢?egrep -n 'gd|good' regular_express.txt egrep -n 'gd|good|dog' regular_express.txt
    () 意义:找出『群组』字串 范例:搜寻 (glad) 或 (good) 这两个字串,因为 g 与 d 是重复的,所以, 我就可以将 la 与 oo 列于 ( ) 当中,并以 | 来分隔开来,就可以啦!egrep -n 'g(la|oo)d' regular_express.txt
    ()+ 意义:多个重复群组的判别 范例:将『AxyzxyzxyzxyzC』用 echo 叫出,然后再使用如下的方法搜寻一下!echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C'上面的例子意思是说,我要找开头是 A 结尾是 C ,中间有一个以上的 "xyz" 字串的意思~

    格式化打印:printf

    [root@www ~]# printf '列印格式' 实际内容
    选项与参数:
    关于格式方面的几个特殊样式:
           a    警告声音输出
               倒退键(backspace)
           f    清除萤幕 (form feed)
           
        输出新的一行
           
        亦即 Enter 按键
           	    水平的 [tab] 按键
           v    垂直的 [tab] 按键
           xNN  NN 为两位数的数字,可以转换数字成为字节。
    关于 C 程序语言内,常见的变量格式
           %ns   那个 n 是数字, s 代表 string ,亦即多少个字节;
           %ni   那个 n 是数字, i 代表 integer ,亦即多少整数码数;
           %N.nf 那个 n 与 N 都是数字, f 代表 floating (浮点),如果有小数码数,
                 假设我共要十个位数,但小数点有两位,即为 %10.2f 罗!
    

    awk:好用的数据处理工具

    awk 处理流程:

    1. 读入第一行,并将第一行的数据填入 $0, $1, $2.... 等变量当中;
    2. 依据 "条件类型" 的限制,判断是否需要进行后面的 "动作";
    3. 做完所有的动作与条件类型;
    4. 若还有后续的『行』的数据,则重复上面 1~3 的步骤,直到所有的数据都读完为止。

    awk 内建变量:

    变量名称 代表意义
    NF 每一行 ($0) 拥有的栏位总数
    NR 目前 awk 所处理的是『第几行』数据
    FS 目前的分隔字节,默认是空白键

    例:

    [root@www ~]# last -n 5| awk '{print $1 "	 lines: " NR "	 columns: " NF}'
    root     lines: 1        columns: 10
    root     lines: 2        columns: 10
    root     lines: 3        columns: 10
    dmtsai   lines: 4        columns: 10
    root     lines: 5        columns: 9
    
    # 注意喔,在 awk 内的 NR, NF 等变量要用大写,且不需要有钱字号 $ 啦!```
    awk 逻辑运算字节:
    

    awk 逻辑运算字节

    运算单元 代表意义
    > 大于
    < 小于
    >= 大于或等于
    <= 小于或等于
    == 等于
    != 不等于

    例:

    [root@www ~]# cat pay.txt |  > awk 'NR==1{printf "%10s %10s %10s %10s %10s
    ",$1,$2,$3,$4,"Total" } NR>=2{total = $2 + $3 + $4 printf "%10s %10d %10d %10d %10.2f
    ", $1, $2, $3, $4, total}'      Name        1st        2nd        3th      Total     VBird      23000      24000      25000   72000.00    DMTsai      21000      20000      23000   64000.00     Bird2      43000      42000      41000  126000.00
    
    • awk 的命令间隔:所有 awk 的动作,亦即在 {} 内的动作,如果有需要多个命令辅助时,可利用分号『;』间隔, 或者直接以 [Enter] 按键来隔开每个命令,例如上面的范例中,鸟哥共按了三次 [enter] 喔!
    • 逻辑运算当中,如果是『等于』的情况,则务必使用两个等号『==』!
    • 格式化输出时,在 printf 的格式配置当中,务必加上 ,才能进行分行!
    • 与 bash shell 的变量不同,在 awk 当中,变量可以直接使用,不需加上 $ 符号。
  • 相关阅读:
    Unity 3D 一个简单的角色控制脚本
    Unity3D 纹理偏移(TextureOffset)浅析
    递归函数的原理
    彻底搞定 C/C++ 指针
    zygote的分裂
    SystemServer分析
    Zygote原理学习
    Vmware Linux虚拟机磁盘扩容方法
    Ubuntu12.04 64bit版本下载Android源码完整教程
    Android2.2源码属性服务分析
  • 原文地址:https://www.cnblogs.com/ananing/p/14225062.html
Copyright © 2011-2022 走看看