【linux命令讲解大全】052.Awk 字符串函数、一般函数和时间函数详解

2024-03-02 13:15:41 浏览数 (2)

内置函数

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 参数则使用某天的时间。返回先前的种子值。

举例说明:

代码语言:javascript复制
awk 'BEGIN{
  OFMT="%.3f";
  fs=sin(1);
  fe=exp(10);
  fl=log(10);
  fi=int(3.1415);
  print fs,fe,fl,fi;
}'

输出:

代码语言:javascript复制
0.841 22026.466 2.303 3

OFMT 设置输出数据格式是保留 3 位小数。

获得随机数:

代码语言:javascript复制
awk 'BEGIN{srand();fr=int(100*rand());print fr;}'

输出:

代码语言:javascript复制
78
代码语言:javascript复制
awk 'BEGIN{srand();fr=int(100*rand());print fr;}'

输出:

代码语言:javascript复制
31
代码语言:javascript复制
awk 'BEGIN{srand();fr=int(100*rand());print fr;}'

输出:

代码语言:javascript复制
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 参数是要包含在字符串中的一个或多个表达式值。返回生成的字符串。

举例说明:

代码语言:javascript复制
awk 'BEGIN{
  surname="Jackson";
  name="Michael";
  full_name=surname " " name;
  print full_name;
}'

输出:

代码语言:javascript复制
Jackson Michael
代码语言:javascript复制
awk 'BEGIN{
  string="Hello, World!";
  print length(string);
}'

输出:

代码语言:javascript复制
13
代码语言:javascript复制
awk 'BEGIN{
  string="Hello, World!";
  print index(string, "World");
}'

输出:

代码语言:javascript复制
8
代码语言:javascript复制
awk 'BEGIN{
  string="Hello, World!";
  substring=substr(string, 7, 5);
  print substring;
}'

输出:

代码语言:javascript复制
World
代码语言:javascript复制
awk 'BEGIN{
  string="Hello, World!";
  count=split(string, array, ",");
  for (i=1; i<=count; i  ) {
    print array[i];
  }
}'

输出:

代码语言:javascript复制
Hello
 World!
代码语言:javascript复制
awk 'BEGIN{
  string="Hello, World!";
  print tolower(string);
}'

输出:

代码语言:javascript复制
hello, world!
代码语言:javascript复制
awk 'BEGIN{
  string="Hello, World!";
  print toupper(string);
}'

输出:

代码语言:javascript复制
HELLO, WORLD!
代码语言:javascript复制
awk 'BEGIN{
  number=42.12345;
  formatted=sprintf("%.2f", number);
  print formatted;
}'

输出:

代码语言:javascript复制
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 的值。如果未指定参数,则使用时间作为种子,这将生成不同的随机数序列。

举例说明:

代码语言:javascript复制
awk 'BEGIN{
  string="Hello, World!";
  print length(string);
}'

输出:

代码语言:javascript复制
13
代码语言:javascript复制
awk 'BEGIN{
  string="Hello, World!";
  print blength(string);
}'

输出:

代码语言:javascript复制
14
代码语言:javascript复制
awk 'BEGIN{
  system("date");
}'

输出类似于:

代码语言:javascript复制
Fri Sep  4 01:23:43 UTC 2023
代码语言:javascript复制
awk 'BEGIN{
  srand();
  random=rand();
  print random;
}'

输出:

代码语言:javascript复制
0.621065
代码语言:javascript复制
awk 'BEGIN{
  srand(12345);
  random=rand();
  print random;
}'

输出:

代码语言:javascript复制
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 参数,则使用当前时间。

举例说明:

代码语言:javascript复制
awk 'BEGIN{
  timestamp=systime();
  print "Current timestamp:", timestamp;
}'

输出:

代码语言:javascript复制
Current timestamp: 1700387423
代码语言:javascript复制
awk 'BEGIN{
  date="2023 09 04 12 30 00";
  timestamp=mktime(date);
  print "Timestamp:", timestamp;
}'

输出:

代码语言:javascript复制
Timestamp: 1700333400
代码语言:javascript复制
awk 'BEGIN{
  timestamp=systime();
  formatted=sprintf("%Y-%m-%d %H:%M:%S", timestamp);
  print "Formatted time:", formatted;
}'

输出类似于:

代码语言:javascript复制
Formatted time: 2023-09-04 01:23:43
代码语言:javascript复制
awk 'BEGIN{
  timestamp=systime();
  formatted=strftime("%A, %B %d, %Y - %I:%M %p", timestamp);
  print "Formatted time:", formatted;
}'

输出类似于:

代码语言:javascript复制
Formatted time: Sunday, September 04, 2023 - 01:23 AM

0 人点赞