awk 内置函数,主要分以下3种类似:算数函数、字符串函数、其它一般函数、时间函数。
格式 | 描述 |
---|---|
atan2(y, x) | 返回 y/x 的反正切。 |
cos(x) | 返回 x 的余弦;x 是弧度。 |
sin(x) | 返回 x 的正弦;x 是弧度。 |
exp(x) | 返回 x 幂函数。 |
log(x) | 返回 x 的自然对数。 |
sqrt(x) | 返回 x 平方根。 |
int(x) | 返回 x 的截断至整数的值。 |
rand() | 返回任意数字 n,其中 0<=n<1。 |
srand([expr]) | 将 rand 函数的种子值设置为 Expr 参数的值,或如果省略 Expr 参数则使用某天的时间。返回先前的种子值。 |
举例说明:
awk 'BEGIN{
OFMT="%.3f";
fs=sin(1);
fe=exp(10);
fl=log(10);
fi=int(3.1415);
print fs,fe,fl,fi;
}'
输出:
0.841 22026.466 2.303 3
OFMT 设置输出数据格式是保留 3 位小数。
获得随机数:
awk 'BEGIN{srand();fr=int(100*rand());print fr;}'
输出:
78
awk 'BEGIN{srand();fr=int(100*rand());print fr;}'
输出:
31
awk 'BEGIN{srand();fr=int(100*rand());print fr;}'
输出:
41
格式 | 描述 |
---|---|
gsub(Ere, Repl, [In]) | 除了正则表达式所有具体值被替代这点,它和 sub 函数完全一样地执行。 |
sub(Ere, Repl, [In]) | 用 Repl 参数指定的字符串替换 In 参数指定的字符串中的由 Ere 参数指定的扩展正则表达式的第一个具体值。sub 函数返回替换的数量。出现在 Repl 参数指定的字符串中的 &(和符号)由 In 参数指定的与 Ere 参数的指定的扩展正则表达式匹配的字符串替换。如果未指定 In 参数,缺省值是整个记录($0 记录变量)。 |
index(String1, String2) | 在由 String1 参数指定的字符串(其中有出现 String2 指定的参数)中,返回位置,从 1 开始编号。如果 String2 参数不在 String1 参数中出现,则返回 0(零)。 |
length [(String)] | 返回 String 参数指定的字符串的长度(字符形式)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。 |
blength [(String)] | 返回 String 参数指定的字符串的长度(以字节为单位)。如果未给出 String 参数,则返回整个记录的长度($0 记录 |
substr(String, Start [, Length]) | 提取由 String 参数指定的字符串中开始在 Start 参数指定的位置的子字符串,长度为 Length 参数指定的字符数。如果未给出 Length 参数,则返回从 Start 位置到字符串末尾的子字符串。 |
match(String, Ere) | 对由 String 参数指定的字符串执行Ere 参数指定的扩展正则表达式的匹配操作。如果成功,返回非零整数值,否则返回 0。变量 RSTART 和 RLENGTH 的值指定匹配子字符串的起始位置和长度。 |
split(String, Array [, Sep]) | 将由 String 参数指定的输入字段分割成多个元素并存储到 Array 数组中,每个数组元素对应一个字段。字段之间由 Sep 参数指定的分隔符隔开。如果 Sep 参数未指定,则使用空格作为分隔符。返回分割的数量。 |
tolower(String) | 将 String 参数指定的字符串转换成小写形式,并返回结果。 |
toupper(String) | 将 String 参数指定的字符串转换成大写形式,并返回结果。 |
sprintf(Format [,Item] ...) | 根据 Format 参数指定的格式生成一个字符串。Item 参数是要包含在字符串中的一个或多个表达式值。返回生成的字符串。 |
举例说明:
awk 'BEGIN{
surname="Jackson";
name="Michael";
full_name=surname " " name;
print full_name;
}'
输出:
Jackson Michael
awk 'BEGIN{
string="Hello, World!";
print length(string);
}'
输出:
13
awk 'BEGIN{
string="Hello, World!";
print index(string, "World");
}'
输出:
8
awk 'BEGIN{
string="Hello, World!";
substring=substr(string, 7, 5);
print substring;
}'
输出:
World
awk 'BEGIN{
string="Hello, World!";
count=split(string, array, ",");
for (i=1; i<=count; i++) {
print array[i];
}
}'
输出:
Hello
World!
awk 'BEGIN{
string="Hello, World!";
print tolower(string);
}'
输出:
hello, world!
awk 'BEGIN{
string="Hello, World!";
print toupper(string);
}'
输出:
HELLO, WORLD!
awk 'BEGIN{
number=42.12345;
formatted=sprintf("%.2f", number);
print formatted;
}'
输出:
42.12
格式 | 描述 |
---|---|
length [(String)] | 返回 String 参数指定的字符串的长度(字符形式)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。 |
blength [(String)] | 返回 String 参数指定的字符串的长度(以字节为单位)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。 |
system(Command) | 在通过 Command 参数指定的命令上启动一个新的 shell。Command 参数可以是任何想要执行的 Unix 命令,包括使用管道、输入/输出重定向等的命令。函数返回 shell 返回的退出状态代码。 |
rand() | 返回介于 0(包含)和 1(不包含)之间的伪随机数。 |
srand([Expr]) | 如果参数 Expr 被给出,则更改随机数生成器的种子为 Expr 的值。如果未指定参数,则使用时间作为种子,这将生成不同的随机数序列。 |
举例说明:
awk 'BEGIN{
string="Hello, World!";
print length(string);
}'
输出:
13
awk 'BEGIN{
string="Hello, World!";
print blength(string);
}'
输出:
14
awk 'BEGIN{
system("date");
}'
输出类似于:
Fri Sep 4 01:23:43 UTC 2023
awk 'BEGIN{
srand();
random=rand();
print random;
}'
输出:
0.621065
awk 'BEGIN{
srand(12345);
random=rand();
print random;
}'
输出:
0.605718
格式 | 描述 |
---|---|
systime() | 返回从 1970 年 1 月 1 日 00:00:00 GMT 到当前时间的秒数。 |
mktime(date [, utc-flag]) | 根据 date 参数指定的日期和时间创建一个时间戳。date 参数的格式为"YYYY MM DD HH MM SS [DST]"。如果 utc-flag 为非零(即真),则时间戳是基于 UTC 时间的,否则是基于本地时区。 |
sprintf(Format [,Timestamp]) | 根据 Format 参数指定的格式生成一个时间字符串。Timestamp 参数是由 mktime 函数生成的时间戳。如果未给出 Timestamp 参数,则使用当前时间。 |
strftime(Format [,Timestamp]) | 根据 Format 参数指定的格式生成一个时间字符串。Timestamp 参数是由 mktime 函数生成的时间戳。如果未给出 Timestamp 参数,则使用当前时间。 |
举例说明:
awk 'BEGIN{
timestamp=systime();
print "Current timestamp:", timestamp;
}'
输出:
Current timestamp: 1700387423
awk 'BEGIN{
date="2023 09 04 12 30 00";
timestamp=mktime(date);
print "Timestamp:", timestamp;
}'
输出:
Timestamp: 1700333400
awk 'BEGIN{
timestamp=systime();
formatted=sprintf("%Y-%m-%d %H:%M:%S", timestamp);
print "Formatted time:", formatted;
}'
输出类似于:
Formatted time: 2023-09-04 01:23:43
awk 'BEGIN{
timestamp=systime();
formatted=strftime("%A, %B %d, %Y - %I:%M %p", timestamp);
print "Formatted time:", formatted;
}'
输出类似于:
Formatted time: Sunday, September 04, 2023 - 01:23 AM