| atan2(y,x) | 计算y/x的反正切 |
| cos(x) | 计算x的余弦;x是弧度 |
| sin(x) | 计算x的正弦;x是弧度 |
| exp(x) | 计算e的x幂 |
| log(x) | 计算x的自然对数 |
| sqrt(x) | 计算x平方根 |
| int(x) | 计算x的截断至整数的值 |
| rand() | 返回一个随机数,范围0~1,小于1 |
| srand(x) | 设置rand函数的种子值,省略参数则使用时间作为参数。返回先前的种子值 |
awk'BEGIN{printexp(1)}'
2.71828
awk'BEGIN{printsqrt(25)}'
5
awk'BEGIN{printlog(exp(1))}'
1
awk'BEGIN{printint(5.5)}'
5
没有使用srand时,rand的随机数每次都一样
awk'BEGIN{printrand()}'
0.237788
awk'BEGIN{printrand()}'
0.237788
使用srand后,每次都不一样
awk'BEGIN{srand();printrand()}'
0.110823
awk'BEGIN{srand();printrand()}'
0.681478
| gsub(pattern,des,src) | 由des替换src所有被pattern匹配的字符串 |
| sub(pattern,des,src) | 用des替换src中被pattern匹配的第一个字符串。函数返回替换的数量。如果未指定src参数,缺省值是整个记录($0) |
| index(str1,Str2) | str2中的字符串出现在str1中的从1开始的位置。若没有则返回0 |
| length(str) | 返回str参数指定的字符串的长度(字符形式)。如果未给出str参数,则返回整个记录的长度($0) |
| substr(str,ptr,n) | 返回字符串s中从ptr开始长度为n的字符串,如果未指定n,则返回ptr指定的位置到str参数的末尾的字符串 |
| match(str,pattern) | 返回在str中匹配pattern的开始位置,并设置RLENGTH变量为匹配个数。无匹配时RLENGTH为-1 |
| split(str,array,[pattern]) | 将str字符串以pattern为分隔符,分割并存在array数组内。省略pattern时使用默认分隔符 |
| tolower(str) | 返回str参数指定的字符串,字符串中每个大写字符将更改为小写 |
| toupper(str) | 返回str参数指定的字符串,字符串中每个小写字符将更改为大写 |
| sprintf(format,expr,expr,...) | 字符串格式化函数,返回格式化后的字符串 |
cat tmp.txt
str strstr str
awk '{sub(/str/,"123");print $0}' tmp.txt
123ing strstr str
awk '{gsub(/str/,"123");print $0}' tmp.txt
123ing 123ing123ing 123ing
awk 'BEGIN{print index("1234","23")}'
2
awk 'BEGIN{print length("1234")}'
4
$awk 'BEGIN{print substr("1234",2,2)}'
23
awk 'BEGIN{print substr("1234",2)}'
234
awk 'BEGIN{print match("abcd",/cd/);print RLENGTH}'
3
2
awk 'BEGIN{print match("abcd",/e/);print RLENGTH}'
0
$awk 'BEGIN {split("123;456;789",array,/;/);i=0;for(i in array)print array[i]}'
123
456
789
awk 'BEGIN {print toupper("string");}'
STRING
awk 'BEGIN {print tolower("STRING");}'
string
awk 'BEGIN {a=1;b="string";print sprintf("hello %d hello %s",a,b);}'
hello 1 hello string| close(filenameORcommand) | 关闭打开的文件或管道。成功,则返回 0;其它情况下返回非零值 |
| system(command ) | 执行command参数指定的命令,并返回退出状态。等同于 system 子例程 |
| expression | getline [ variable ] | 将expression命令的输出通过管道读入variable,如果当前未打开将 expression管道,则创建管道且是只读管道。只要管道保持打开,则对 getline 函数的每次调用都会读取下一行记录。如果未指定 variable 参数,则 $0 记录变量设置为该记录的值,还将设置 NF、NR 和 FNR 特殊变量 |
| getline [ variable ] < filename | 从 filename 指定的文件读取下一个记录,并存在 variable 内。只要输入流保持打开且 filename 参数对同一个字符串求值,则对 getline 函数的每次调用都会读取下一行记录。如果未指定 variable 参数,则 $0 记录变量设置为该记录的值,还将设置 NF、NR 和 FNR 特殊变量 |
| getline [ variable ] | 将 variable 参数指定的变量设置为从当前输入文件读取的下一个输入记录。如果未指定 variable 参数,则 $0 记录变量设置为该记录的值,还将设置 NF、NR 和 FNR 特殊变量 |
awk 'BEGIN{system("cat tmp.txt")}'
string stringstring string
awk 'BEGIN {"cat ~/tmp.txt" | getline;print $0;close("cat ~/tmp.txt");}'
string stringstring string
awk 'BEGIN {getline a< "tmp.txt";print a;close("tmp.txt");}'
string stringstring string
| mktime("YYYY MM DD HH MM SS") | 生成时间格式 |
| strftime([format [, timestamp]]) | 格式化时间输出,将时间戳转为时间字符串 |
| systime() | 得到时间戳,返回从1970年1月1日开始到当前时间(不计闰年)的整秒数 |
awk 'BEGIN{last=mktime("2012 01 02 03 04 05");print strftime("%Y %m %d %H %M %S",last)}'
2012 01 02 03 04 05
| 格式 | 描述 |
| %a | 星期几的缩写(Sun) |
| %A | 星期几的完整写法(Sunday) |
| %b | 月名的缩写(Oct) |
| %B | 月名的完整写法(October) |
| %c | 本地日期和时间 |
| %d | 十进制日期 |
| %D | 日期 08/20/99 |
| %e | 日期,如果只有一位会补上一个空格 |
| %H | 用十进制表示24小时格式的小时 |
| %I | 用十进制表示12小时格式的小时 |
| %j | 从1月1日起一年中的第几天 |
| %m | 十进制表示的月份 |
| %M | 十进制表示的分钟 |
| %S | 十进制表示的秒 |
| %U | 十进制表示的一年中的第几个星期(星期天作为一个星期的开始) |
| %w | 十进制表示的星期几(星期天是0) |
| %W | 十进制表示的一年中的第几个星期(星期一作为一个星期的开始) |
| %x | 重新设置本地日期(08/20/99) |
| %X | 重新设置本地时间(12:00:00) |
| %y | 两位数字表示的年(99) |
| %Y | 完整数字表示的年 |
| %Z | 时区(PDT) |
| %p | 12小时表示法(AM/PM) |
| %% | 百分号(%) |
类似于c语言函数,但参数类型,以及返回值类型。
函数定义以function 开头,可定义在非语句块内的任意位置。
函数调用是可提供0个或多个参数,对于缺少的参数默认值为0或空字符串
通过return关键字可以提前结束函数并返回
函数的参数如果是标量则是传值,数组则是传引用,函数中改变数组的值可以改变全局数组中的值
$0,$1,$2...默认是全部脚本使用,无论在函数内还是函数外,可以认为是全局的awk '
BEGIN{print max(1,2,3)}
function max(a,b,c)
{
a=a>b?a:b;
return a>c?a:c;
}'
3
awk '
BEGIN{print max(1,2,3)}
function max(a,b,c)
{
a=a>b?a:b;
return a;
a>c?a:c;
}'
2
awk '
BEGIN{print max(1,2,3)}
function max(a,b,c)
{
a=a>b?a:b;
a>c?a:c;
}'
输出空格
在一个awk脚本内部可以引用另外的awk脚本或库函数
通过关键字include和load来引用 @include "filename" @load "filename"
也可通过-i指定include-file,和通过-l指定load-lib
文件的默认搜索路径由环境变量ENVIRON中的AWKPATH和AWKLIBPATH指定。awk 'BEGIN{print sprintf("AWKPATH =" ENVIRON["AWKPATH"])}'
AWKPATH =.:/usr/share/awk
awk 'BEGIN{print sprintf("AWKLIBPATH =" ENVIRON["AWKLIBPATH"])}'
AWKLIBPATH =/usr/lib/gawk在awksrc文件内
cat awksrc
function max(a,b,c)
{
a=a>b?a:b;
return a>c?a:c;
}
function min(a,b,c)
{
a=a<b?a:b;
return a<c?a:c;
}
cat testawk.awk
#!/bin/awk -f
@include "awksrc"
BEGIN{print "输入3个数字,将输出最大值:"}
{
print max($1,$2,$3)
};
执行:
./testawk.awk
输入3个数字,将输出最大值:
1 2 3
3
原文地址:http://blog.csdn.net/zsp_skyer/article/details/39641845