awk 内置变量和函数
awk内置变量(预定义变量)变量 含义 缺省值
--------------------------------------------------------
ARGC 命令行上除了选项-F,-v,-f以及这些选项所对应的参数之外的所有参数的个数
awk -F, 'END{print ARGC}' test
参数为2个,awk和test ARGIND 当前被处理文件的ARGV标志符
awk -F, 'END{print ARGIND}' test
test在命令行的位置为1 ARGV 命令行参数数组
awk -F, 'END{print ARGV[0],ARGV[1]}' test
打印awk test
CONVFMT 数字转换成字符串格式默认为 %.6g
awk 'BEGIN{CONVFMT="%.6g"}END{a=172.345678;b=a"";print b;}' test
将数字a转换成字符串b时的转换格式
输出:172.346 ENVIRON UNIX环境变量
awk -F, 'END{for(var in ENVIRON){print var,ENVIRON[var]}}' test
打印环境变量的名和值ERRNO UNIX最后一个系统错误消息
FILEDWIDTHS 输入字段宽度的空白分隔字符串
字段宽度列表(用空格键分隔)。替换FS分隔符
awk 'BEGIN{FIELDWIDTHS="1 2"}{print $1,$2}' test
打印出:
T es
FILENAME 当前输入文件的名字
FNR 当前文件记录数,变换文件重新计算
FS 输入字段分隔符 空格 IGNORECASE 控制大小写敏感0(大小写敏感)
awk 'BEGIN{IGNORECASE=1}/test/' test
打印出:
1 Test
2 test NF 当前记录中的字段个数
NR 已经读出的记录数 OFMT 数字的输出格式 %.6g
awk 'BEGIN{OFMT="%.4g"}END{print 172.345678;}' test
打印出:172.3 OFS 输出字段分隔符 空格
ORS 输出的记录分隔符 新行
RS 输入的记录分隔符 新行RSTART 被匹配函数匹配的字符串的第一个位置
RLENGTH 被匹配函数匹配的字符串长度
由match函数所匹配的字符串的第一个位置。
awk 'END{match("hello test!",/st!$/);print RSTART,RLENGTH}' test
打印出:9 3 (从1开始数) SUBSEP 下标分隔符 "\034"
awk 'BEGIN{array[0,0]="test1";array[0,1]="test2";}END{for(var in array){print var,SUBSEP,array[var]}}' test
输出:其中SUBSEP替换了0,0中的逗号,(经测试不加SUBSEP,结果一样)?
00 test1
01 test2
awk的内置函数
函数 用途或返回值
------------------------------------------------
gsub(reg,string,target) 每次常规表达式reg匹配时替换target中的string
#awk 'BEGIN{x="xyzabcxyzabcxyz";gsub(/abc/,"ABC",x);print x}'
xyzABCxyzABCxyz gensub(正则,替换,范围,目标串)
#awk 'BEGIN{print gensub("zorro","AAAA","2",seker zorro zorro seker)}'
seker zorro AAAA seker index(search,string) 返回string中search串的位置
awk 'BEGIN{info="this is a test2010test!";print index(info,"test")}'
11 length(string) 求串string中的字符个数
awk 'BEGIN{print length("test1234")}'
8 match(string,reg) 返回常规表达式reg匹配的string中的位置
awk 'BEGIN{info="this is a test2010test!";print match(info,/[0-9]+/)}'
15 printf(format,variable) 格式化输出,按format提供的格式输出变量variable。
split(string,store,delim) 根据分界符delim,分解string为store的数组元素
awk 'BEGIN{info="this is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}'
4 test
1 this
2 is
3 a
sprintf(format,variable) 返回一个包含基于format的格式化数据,variables是要放到串中的数据
strftime(format,timestamp) 返回一个基于format的日期或者时间串,timestmp是systime()函数返回的时间
sub(reg,string,target) 第一次当常规表达式reg匹配,替换target串中的字符串
substr(string,position,len) 返回一个以position开始len个字符的子串
awk 'BEGIN{info="this is a test2010test!";print substr(info,4,10);}'
s is a tes
tolower(string) 返回string中对应的小写字符
toupper(string) 返回string中对应的大写字符
atan(x,y) x的余切(弧度)
cos(x) x的余弦(弧度)
exp(x) e的x幂
int(x) x的整数部分
log(x) x的自然对数值
rand() 0-1之间的随机数
sin(x) x的正弦(弧度)
sqrt(x) x的平方根
srand(x) 初始化随机数发生器。如果忽略x,则使用系统时间
#awk 'BEGIN{srand();fr=int(100*rand());print fr;}'
78
system() 执行系统命令
相关文章
- Solidity私有函数和私有变量区别,私有变量可以被访问吗
- 内置函数——filter和map
- SQLServer中DataLength()和Len()两内置函数的区别
- 关于C语言变量和函数命名规范
- CMake之message函数的使用和打印变量值
- C#委托(delegate)的常用方式- 委托的定义 // 委托的核心是跟委托的函数结构一样 public delegate string SayHello(string c); public delegate string SayHello(string c);:定义了一个公共委托类型 SayHello,该委托接受一个 string 类型的参数 c,并返回一个 string 类型的值。 Main 方法 static void Main(string args) { // 本质上其实就是把方法当作委托的参数 SayHello sayC = new SayHello(SayChinese); Console.WriteLine(sayC("欢迎大家")); SayHello sayE = new SayHello(SayEgnlish); Console.WriteLine(sayE("Welcome to")); // 简单的写法:必须类型一样 SayHello s1 = SayChinese; SayHello s2 = SayEgnlish; Console.WriteLine(s1("好好好")); Console.WriteLine(s2("Gooood")); // 最推荐 SayHello ss1 = con => con; Console.WriteLine(ss1("niiiice")); // 匿名委托:一次性委托 SayHello ss3 = delegate(string s) { return s; }; Console.WriteLine(ss3("说中国话")); } 常规实例化委托 SayHello sayC = new SayHello(SayChinese);:创建了一个 SayHello 委托的实例 sayC,并将 SayChinese 方法作为参数传递给委托的构造函数。 Console.WriteLine(sayC("欢迎大家"));:通过委托实例调用 SayChinese 方法,并输出结果。 同理,SayHello sayE = new SayHello(SayEgnlish); 和 Console.WriteLine(sayE("Welcome to")); 是对 SayEgnlish 方法的委托调用。 简化的委托赋值方式 SayHello s1 = SayChinese; 和 SayHello s2 = SayEgnlish;:当委托类型和方法签名一致时,可以直接将方法赋值给委托变量,无需使用 new 关键字。 Console.WriteLine(s1("好好好")); 和 Console.WriteLine(s2("Gooood"));:通过委托实例调用相应的方法。 使用 Lambda 表达式实例化委托 SayHello ss1 = con => con;:使用 Lambda 表达式创建委托实例 ss1,con => con 表示接受一个参数 con 并返回该参数本身。 Console.WriteLine(ss1("niiiice"));:通过委托实例调用 Lambda 表达式。 匿名委托 SayHello ss3 = delegate(string s) { return s; };:使用匿名委托创建委托实例 ss3,delegate(string s) { return s; } 是一个匿名方法,直接在委托实例化时定义了方法体。 Console.WriteLine(ss3("说中国话"));:通过委托实例调用匿名方法。 委托引用的方法定义 public static string SayChinese(string content) { return content; } public static string SayEgnlish(string content) { return content; } public static string SayChinese(string content) 和 public static string SayEgnlish(string content):定义了两个静态方法,分别接受一个 string 类型的参数 content,并返回该参数本身。这两个方法的签名与 SayHello 委托一致,可以被 SayHello 委托引用。 常规的委托实例化、简化的赋值方式、Lambda 表达式和匿名委托。委托在 C# 中是一种强大的机制,它允许将方法作为参数传递,实现了代码的灵活性和可扩展性。
- js变量提升和函数提升
- HTML中的函数使用基础(函数定义,函数调用,函数参数,函数返回值,嵌套函数,递归函数,变量作用域,内置函数,其他定义函数的方法)
- Python开发【第四篇】: 三大器和内置函数
- linux awk 内置函数详细介绍(实例)