前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【linux命令讲解大全】052.Awk 字符串函数、一般函数和时间函数详解

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

作者头像
全栈若城
发布2024-03-02 13:15:41
1280
发布2024-03-02 13:15:41
举报
文章被收录于专栏:若城技术专栏若城技术专栏

内置函数

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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 内置函数
    • 算术函数
      • 字符串函数
        • 其它一般函数
          • 时间函数
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档