awk

来源:互联网 发布:信捷plc读取485数据 编辑:程序博客网 时间:2024/06/07 16:05

awk概述

awk是一种处理文本的语言,它将文件作为一个记录序列进行处理。一般情况下,一个文件的每一行就是一个记录,然后每行内容会被划分为一系列的域。一般情况下,我们可以认为一行的第一个词就是第一个域,第二个词为第二个域。


awk执行

awk ’awk 程序‘ 数据文件文件名
awk会先编译那个程序,然后执行该程序处理数据文件

awk程序的主要结构

awk是由一系列的 模式--动作 对组成的

pattern { action }


Pattern

pattern一般都是使用“关系表达式”来当Pattern
例如:
  1. x > 34, 是一个pattern( awk提供c++中常用的关系运算符:>, <, ==, != )
  2. A ~ B (A是一个字符串,B是regular expression,判断两者是否匹配)
  3. A !~ B (A是一个字符串,B是regular expression,判断两者不匹配)


Action

action是由许多awk指令组成的
例如:
  1. I/O指令: print, printf( ), getline...
  2. 流程控制指令: if(...){..} else{..}, while(...){...}...

我们可以发现在一些awk的表达式中会有BEGIN和END,这两个其实就是patten;而这两种条件对应的action分别是读取所有记录之前和之后。


pattern { action } 处理流程

awk首先判断(evaluate)pattern的值,如果pattern值为true(或者不为0,非空字符串),那么就会执行action里面的内容。
例如:
  1. 50 > 23 {print "Hello! The word!!" }(成功输出)
  2. "banana" ~ /123/ { print "Good morning !" }(不会有任何输出结果)


awk字段变量

awk所内建的字段变量及其含义

字段变量含义$0一字符串, 其内容为目前 awk 所读入的数据行$1$0 上第一个字段的数据$2$0 上第二个字段的数据...其余类推

awk的内建变量

常见的内建变量
内建变量含义NF (Number of Fields)为一整数其值表$0上所存在的字段数目NR (Number of Records)为一整数其值表awk已读入的数据行数目.FILENAME正在处理的数据文件文件名
例子:
awk读取一个文件test.bat中的一行“it is a test”

$0 之值将是 "it is a test"

$1 之值为 "it"

$2 之值为 "is"

$3 之值为 "a"

$4 之值为 "tes"

$NF 之值为 4

$NR 之值为 1

$FILENAME 之值为 "test.bat"


awk内建函数

字符串函数

  • sub(比对用的正则表达式,将替换的新字符串,原字符串)
只会替换第一个满足条件的式子;如果新字符串可以用“&”来表示“合乎条件的子字符串”
A = "a6b12anan212.45an6a"sub( /(an)+[0-9]*/, "[&]", A)print A
输出结果
ab12[anan212].45an6a
sub( )中第三个参数(原字串)若未指定,则其预设值为$0.
  • gsub(比对用的正则表达式,将替换的新字符串,原字符串)
    • 会替换所有满足条件的式子,并返回取代的子字符串个数


0 0
原创粉丝点击