1. 内置函数

awk的内置函数有算术、字符串、时间、位操作和其它杂项的函数。

1.1 算术函数

  • atan2(y,x)  返回弧度的反正切(y/x)
  • cos(expr)  返回expr的余弦(以弧度形式)
  • exp(expr)  此函数用作找到指数值。
  • int(expr)  取整
  • log(expr)  计算自然对数
  • rand()   返回随机数,0和1之间,[0,1)
  • sin(expr)  正弦(以弧度形式)
  • sqrt(expr)  平方根
  • srand([expr])  产生种子值的随机数。使用expr作为随机数生成的新的种子。如果没有expr,使用一天的时间值作为种子值。
[root@oldboy test]# awk 'BEGIN{print int(13.2)}'     # 取整
13
[root@oldboy test]# awk 'BEGIN{print log(13.2)}' # 自然对数
2.58022
[root@oldboy test]# awk 'BEGIN{print rand()}' # 随机数
0.237788
[root@oldboy test]# awk 'BEGIN{print srand()}' # 随机数种子
1
[root@oldboy test]# awk 'BEGIN{print srand(111)}'
1
[root@oldboy test]# awk 'BEGIN{print srand(13.2)}'
1
[root@oldboy test]# awk 'BEGIN{print rand()}' # 固定不变的随机数
0.237788
[root@oldboy test]# awk 'BEGIN{print rand()}'
0.237788
[root@oldboy test]# awk 'BEGIN{print rand()}'
0.237788 [root@oldboy test]# awk 'BEGIN{print sqrt(13.2)}' # 平方根
3.63318

1.2 字符串函数

  • gsub(Ere, Repl, [ln])  和sub函数完全一样使用。区别:gsub全部替换,sub只替换匹配正则的第一个具体值。
  • sub(Ere, Repl, [ln])   
    • 用Repl参数指定的字符串题替换 ln 参数指定的字符串中的由 Ere参数指定的扩展正则表达式的第一个具体值。
    • sub函数返回替换的数量。
    • 出现在Repl参数指定的字符串中的&(and符号)由ln参数指定的与Ere参数的指定的扩展正则表达式匹配的字符串替换。
    • 如果未指定ln参数,缺省值是整个记录($0)
  • index(str1, str2)
    • 在str1中如果有出现str2,则返回在str1中的位置;若str2不存在,则返回0.
    • 字符串的索引起始值为1。
  • length[(str)]
    • 返回str的字符串长度(字符形式)
    • 如未给出str参数,则返回整个记录的长度($0)
  • substr(str, start, [length])
    • 从字符串str中,起始位置start取长度为length的子字符串。
    • 如为指定参数length,则子串的长度将是从start位置到str的结尾的长度。
  • match(str, Ere)
    • 匹配正则的模式,如str中存在,则返回匹配的位置
    • 如不存在,则返回0
  • split(str, Arr, [Ere])
    • 将str通过Ere分割成array
  • tolower(str) 小写化
  • toupper(str) 大写化
  • sprintf(Format, Expr, Expr,...)
    • 根据format参数指定的prinf子例格式字符串来格式化Expr参数指定的表达式,并返回最后生成的字符串。

参数:

    • str字符串;
    • Ere扩展正则表达式
    • Repli 替换字符串

示例:

gsub替换:在info中查找满足正则表达式,/[0-9]+/用"!" 替换,并且替换后的值,赋值给info未给info值,默认是$0。

[root@oldboy test]# awk 'BEGIN{info="this is a test 2010test!";gsub(/[0-9]+/,"!",info); print info}'
this is a test !test!

sub替换:替换匹配正则的第一个值;gsub替换所有。

[root@oldboy test]# awk '{sub(/\//,"?");print $0}' awk_test_file.txt
root:x:0:0:root:?root:/bin/bash
bin:x:1:1:bin:?bin:/sbin/nologin
daemon:x:2:2:daemon:?sbin:/sbin/nologin
adm:x:3:4:adm:?var/adm:/sbin/nologin
lp:x:4:7:lp:?var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:?sbin:/bin/sync
shutdown:x:6:0:shutdown:?sbin:/sbin/shutdown
halt:x:7:0:halt:?sbin:/sbin/halt
mail:x:8:12:mail:?var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:?var/spool/uucp:/sbin/nologin
[root@oldboy test]# awk '{gsub(/\//,"?");print $0}' awk_test_file.txt
root:x:0:0:root:?root:?bin?bash
bin:x:1:1:bin:?bin:?sbin?nologin
daemon:x:2:2:daemon:?sbin:?sbin?nologin
adm:x:3:4:adm:?var?adm:?sbin?nologin
lp:x:4:7:lp:?var?spool?lpd:?sbin?nologin
sync:x:5:0:sync:?sbin:?bin?sync
shutdown:x:6:0:shutdown:?sbin:?sbin?shutdown
halt:x:7:0:halt:?sbin:?sbin?halt
mail:x:8:12:mail:?var?spool?mail:?sbin?nologin
uucp:x:10:14:uucp:?var?spool?uucp:?sbin?nologin

index索引值:

[root@oldboy test]# awk '{print index($0,"nologin")}' awk_test_file.txt
0
26
33
30
34
0
0
0
40
41

length取字符串长度,substr取子字符串:

[root@oldboy test]# awk 'BEGIN{str="this is a line.\n this is second line.";print length(str)}'
37 [root@oldboy test]# awk 'BEGIN{str="this is a line.\n this is second line.";print substr(str,20,5)}'
is is
[root@oldboy test]# awk 'BEGIN{str="this is a line.\n this is second line.";print substr(str,20)}'
is is second line.

match匹配查找:结合三元运算显示是否成功匹配

[root@oldboy test]# awk 'BEGIN{info="this is a test2010test!"; print match(info,/[0-9]+/) ? "ok": "no found";}'
ok

split分割:

[root@oldboy test]# 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

1.3 时间函数

1.4 位操作函数

1.5 其它函数

2. 自定义函数

【三剑客】awk函数的更多相关文章

  1. 性能工具之linux三剑客awk、grep、sed详解

    前言 linux 有很多工具可以做文本处理,例如:sort, cut, split, join, paste, comm, uniq, column, rev, tac, tr, nl, pr, he ...

  2. Linux提取不匹配字符串的行和列(awk函数)

    如下图所示,想把含有‘-nan’字符串的行提取出来 则用到awk函数,命令行如下: awk '{if($3!="-nan"){print $3}}' CHB_vs_ITU.weir ...

  3. Linux三剑客awk

    Linux三剑客awk awk是一个强大的linux命令,有强大的文本格式化的能力,好比将一些文本数据格式化成专业的excel表的样式 awk早期在Unix上实现,我们用的awk是gawk,是GUN ...

  4. Linux三剑客-AWK

    1.什么是awk AWK是一种处理文本文件的语言,是一个强大的文本分析工具.有统计和计算功能. 之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Br ...

  5. Linux 三剑客 -- awk sed grep

    本文由本人收集整理自互联网供自己与网友参考,参考文章均已列出,如有侵权,请告知! 顶配awk,中配sed,标配grep awk 参考 sed 参考 grep 参考 在线查看linux命令速记表 app ...

  6. (转)AWK函数

    http://wiki.jikexueyuan.com/project/awk/built-in-functions.html-------内置函数 http://wiki.jikexueyuan.c ...

  7. linux awk函数

    这节详细介绍awk内置函数,主要分以下3种类似:算数函数.字符串函数.其它一般函数.时间函数 一.算术函数: 以下算术函数执行与 C 语言中名称相同的子例程相同的操作: 函数名 说明 atan2( y ...

  8. awk函数实现将简化IPV6地址补全

    在用awk处理文本时,有些场景需要将简化的IPV6地址补充成完整的IPV6地址,下边函数可简单实现: IPV6地址补全函数 # ipv6地址补全函数 function compipv6(orig_ad ...

  9. awk函数实现将点分式形式的掩码转换为十进制形式的掩码

    在用awk处理文本时,需要将源数据为点分式形式的掩码转换为十进制形式的掩码,下边的函数可简单实现: 转换功能函数cdr2mask function cdr2mask(mask_point) { num ...

随机推荐

  1. markdown中锚链接实现目录跳转以及注意事项

    当文章有分类,需要快速阅读,通常会先在文首部写一个目录,点击可以跳转. 为文章写目录,特别在文章较长的时候,有助于对内容的整体把握,能提高阅读效率. 以下,将写一个基本的锚目录demo,然后特别说明需 ...

  2. 1057 Stack (30分)(树状数组+二分)

    Stack is one of the most fundamental data structures, which is based on the principle of Last In Fir ...

  3. 本地代码上传到git仓库(github)

    准备:拥有自己的github账号:电脑上安装了git; 1.进入github,进入仓库点击NEW(新建仓库) 2.新建仓库 Repository name :仓库名称: Description (op ...

  4. 从零搭建一个SpringCloud项目之Zuul(四)

    整合Zuul 为什么要使用Zuul? 易于监控 易于认证 减少客户端与各个微服务之间的交互次数 引入依赖 <dependency> <groupId>org.springfra ...

  5. Unity Shader and Effects Cookbook问题记录

    1.p61的specular计算,涉及到的一个参数“_SpecColor”是在Unity的官方cginc文件(UnityLightingCommon.cginc)中,是直接赋颜色给这个参数,反应到你模 ...

  6. Linux服务器架设篇,DHCP服务器的搭建

    学习之前,我们首先来看一个案例: 假如你是一个学校的网络管理老师,需要为教室的70多台电脑配置好网络你会怎么办? 一台一台的给他们配置? 在这里我特别欣赏鸟哥的一句话--"当管理员最大的幸福 ...

  7. 2017蓝桥杯杨辉三角(C++C组)

    题目: 杨辉三角也叫帕斯卡三角,在很多数量关系中可以看到,十分重要.第0行:           1第1行:          1 1第2行:         1 2 1第3行:        1 3 ...

  8. Netperf网络性能测试工具详解教程

    本文下载链接: [学习笔记]Netperf网络性能测试工具.pdf 一.Netperf工具简介 1.什么是Netperf ? (1)Netperf是由惠普公司开发的一种网络性能测量工具,主要针对基于T ...

  9. 用Taro做个微信小程序Todo, 小白工作记录

    微信小程序框架: Taro 做微信小程序的框架, 几个比较主流的: 官方的WePY: https://tencent.github.io/wepy/document.html#/ 美团的mpvue: ...

  10. D. Feeding Chicken(构造)

    题目大意:将k个鸡放到一个n*m的矩阵中,要求每个鸡所占的rice的个数只差最小 题解:构造,设一共有cnt个rice,可以分cnt/k个,即每一只鸡要么占用cnt/k个rice,要么占cnt/k+1 ...