神级命令awk之30分钟速成必看

Red风信子 2019-06-29

重点提要

  1. 动作的左花括号必须与它的模式在同一行; 而剩下的部分, 包括右花括号, 则可以出现在下面几行;
  2. 如果一个表达式拥有一个数值形式的值, 而运算符要求一个字符串值, 那么该数值会自动转换成字符串, 类似地, 当运算符要求一个数值时, 字符串被自动转换成数值;
  3. 在一个关系比较中, 如果两个操作数都是数值, 关系比较将会按照数值比较进行; 否则的话数值操作数会被转换成字符串, 再将操作数按字符串的形式进行比较两个字符串间的比较以字符为单位逐个相比, 字符间的先后顺序依赖于机器的字符集(大多数情况下是ASCII字符集);
  4. 把一个字符串赋值给内建变量FS 就可以改变字段分隔符. 如果字符串的长度多于一个字符, 那么它会被当成一个正则表达式. 当前输入行中, 与该正则表达式匹配的最左, 最长, 非空且不重叠的子字符串变成字段分隔符;

正则表达式

  1. 正则表达式的元字符包括: ^ $ . [ ] | ( ) * + ?
  2. 一个基本的正则表达式包括下面几种:
    一个不是元字符的字符, 例如A, 这个正则表达式匹配的就是它本身.
    一个匹配特殊符号的转义字符: t 匹配一个制表符(见表2.2).
    一个被引用的元字符, 例如*, 按字面意义匹配元字符.
    ^ 匹配一行的开始.
    $ 匹配一行的结束.
    . 匹配任意一个字符.
    一个字符类: [ABC] 匹配字符A, B 或C.
    字符类可能包含缩写形式: [A-Za-z] 匹配单个字母.
    一个互补的字符类: 1 匹配任意一个不是数字的字符.

【注意】使用gsub时,/也需要转义

使用代码片段

  • 有效浮点数验证
BEGIN {
        sign = "[+-]?"
        decimal = "[0-9]+[.]?[0-9]*"
        fraction = "[.][0-9]+"
        exponent = "([eE]" sign "[0-9]+)?"
        number = "^" sign "(" decimal "|" fraction ")" exponent "$"
    }
    $0 ~ number

  1. 0-9 ↩

相关推荐

Seal学海无涯 / 0评论 2011-11-25