文本处理神器Awk语言内置变量和函数

内置变量

AWK 提供了一些内置变量,列表如下

变量说明默认值
ARGC表示在命令行提供的参数的个数
ARGV命令行输入的参数数组索引从0开始
CONVFMT数据转换为字符串的格式%.6g
OFMT数值输出格式%.6g
ENVIRON环境变量数组
FILENAME*当前文件名称
FS输入列之间的分隔符空格
NF当前输入记录中域的数量
NR当前记录的数量
FNR当前文件的NR
OFS输出列之间的分割符空格
ORS行间分割符换行符
RLENGTHmatch匹配字符串长度
RS输入行的分割符换行符
RSTARTmatch匹配字符串的首字符的位置
SUBSEP数组下标的分割行符\03
$0整个输入记录
$n当前输入的第n列

* 表示开始块中未定义

ARGVARGC为例,可演示一下如何查看这些默认变量

awk 'BEGIN { for (i = 0; i < ARGC - 1; ++i)
    { printf "ARGV[%d] = %s\t", i, ARGV[i] } 
    }' a b c d
ARGV[0] = awk ARGV[1] = a   ARGV[2] = b  ARGV[3] = c

此外,GNU AWK还提供了其他几个内置变量

ARGIND正在处理的ARGV索引
ERRNO失败信息
FIELDWIDTHS列宽
IGNORECASE设置后大小写不敏感
TEXTDOMAINAWK程序当前文本域
  • BINMODE:即二进制模式,用于非 POSIX 系统。 数值1、2、3分别指定输入文件、输出文件或所有文件;字符串rw分别指定输入或输出文件使用二进制模式;rwwr指定所有文件使用二进制模式。

  • LINT:提供了在GAWK程序中动态控制--lint选项的一种途径。此变量设置后,GAWK会输出lint警告信息。如果给此变量赋予字符值fatal,lint 的所有警告信息将会变了致命错误信息(fatal errors)输出,和–lint=fatal 效果一样。

算术和位操作函数

and, or, compl, xor按位求与、或、非、异或
lshift, rshift左移位、右移位
cos(x), sin(x) cos ⁡ x , sin ⁡ x \cos x, \sin x cosx,sinx
exp(x), log(x), sqrt(x) exp ⁡ x , ln ⁡ x , x \exp x, \ln x, \sqrt x expx,lnx,x
atan2(y,x) arctan ⁡ y x \arctan\frac{y}{x} arctanxy
int(x)取整
rand(), srand(n)返回区间 ( 0 , 1 ) (0,1) (0,1)的一个随机数
后者根据随机数种子n来生成

字符串函数与正则表达式

基础功能
asort(arr,[, d [,how] ])对数组arr的值进行字符排序
asorti(arr,[, d [,how] ])对数组arr的索引进行字符排序
gsub(a, b [, tar])tar中的子串a替换为btar默认$0
index(str,sub)返回substr的位置;若不存在则返回0
length(str)返回字符串长度
strtonum(str)str转为数值 [ 1 ] ^{[1]} [1]
tolower(str)str转换为小写格式然后返回 [ 1 ] ^{[1]} [1]
toupper(str)str转换为大写格式然后返回 [ 1 ] ^{[1]} [1]
substr(str, st, L)返回str中从第st个字符开始长度为L的子串
  • [1] strtonum的输入字符串,如以0开始,则转为八进制数;如以0x0X开始,则当作十六进制数;否则当作浮点数。
  • [2] tolowertoupper并不会改变输入字符串str本身。
与正则表达式相关的功能
match(str, regex)返回在str中与regex匹配的子串的位。
sub(regex,sub,str)str首次出现的与regex匹配的子串替换为sub
str默认为$0
split(str, arr,regex)使用regex分割str,输出给arr

其中regex均表示正则表达式;match返回的字符串为匹配的最长、最左侧的字符串,如果匹配失败,返回0。

所谓正则表达式,就是通过匹配符来替代特定文字的方法,其常用的匹配字符如下

匹配字符
.除了行结束字符的所有字符
^匹配一行的开始
$匹配一行的结束
[]匹配方括号中的任意字符
[^]匹配除了[^]中间的其他字符
?其前面的字符不出现或出现一次
其前面的字符不出现或出现多次
+其前面的字符出现一次或多次

字符输出函数

sprintf(format,expr-list) 按指定格式(format)将参数列表 expr-list 构造成字符串然后返回。

时间函数

systime 返回从 Epoch 以来到当前时间的秒数(在POSIX系统上,Epoch 为1970-01-01 00:00:00 UTC)。

mktime(dataspec) 将字符串dataspec转换为与systime 风格的时间戳,dataspec字符串的格式为 YYYY MM DD HH MM SS。

strftime([format [, timestamp[, utc-flag]]]) 根据 format 指定的格式将时间戳 timestamp 格式化。

日期格式说明如下:

SN描述SN描述
%a星期缩写%A星期全称
%b月份缩写%B月份全称
%c本地日期与时间%C世纪数
%d十进制日期(01-31)%D等价于 %m/%d/%y.
%e日期,如果只有一位数字则用空格补齐
%F等价于 %Y-%m-%d
%G标准周所在年份的全称%g标准周所在的年份模除100
%h等价于 %b
%H24小时格式的小时[00-23]%I12小时格式的小时[00-12]
%j一年中的第几天[001-366]
%m月份[01-12]%M分钟数[00-59]
%n换行符 (ASCII LF)
%p十二进制表示法(AM/PM)
%r等价于 %I:%M:%S %p%R等价于 %H:%M。
%S时间的秒数值(00-60)
%t制表符 (tab)%T等价于 %H:%M:%S。
%u以数字表示的星期(1-7),1 表示星期一。
%U一年中星期序号%V一年中星期序号
%w星期[0-6],0表示星期日%W一年中星期序号s
%x本地日期表示%X本地时间表示
%y年份模除100%Y十进制表示的完整年份。
%z时区,表示格式为+HHMM
%Z时区名称或缩写,如果时区待定则无输出。

其中,%U以周日为一周开始;%V, %W以周一作为一周开始;

%z的表示格式为+HHMM(例如,格式要求生成的 RFC 822或者 RFC 1036 时间头)

其它函数

close(expr)关闭管道的文件
delete从数组中删除元素
exit终止脚本执行
flush刷新打开文件或管道的缓冲区
getline读入下一行
next停止处理当前记录,并且进入到下一条记录的处理过程
nextfile停止处理当前文件,从下一个文件第一个记录开始处理。
system执行特定的命令,返回其退出状态,0表示成功,否则表示失败
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值