awk

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(比对用的正则表达式,将替换的新字符串,原字符串)
    • 会替换所有满足条件的式子,并返回取代的子字符串个数


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值