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. Unity 游戏框架搭建 2019 (二十五) 类的第一个作用 与 Obselete 属性

    在上一篇我们整理到了第七个示例,我们今天再接着往下整理.我们来看第八个示例: #if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; ...

  2. 在非主线程里面使用NSTimer创建和取消定时任务

    为什么要在非主线程创建NSTimer 将 timer 添加到主线程的Runloop里面本身会增加线程负荷 如果主线程因为某些原因阻塞卡顿了,timer 定时任务触发的时间精度肯定也会受到影响 有些定时 ...

  3. vue+springboot后台实现页面按钮权限

    思路 1.用户跟角色关联 2.角色跟菜单关联 3.菜单跟菜单下的按钮关联 4.后端返回每个菜单下的按钮,前端通过自定义事件,在每个按钮上加上相应的事件 打字麻烦,还是看图吧! 建立btn.js 然后在 ...

  4. 1005 Spell It Right (20 分)

    Given a non-negative integer N, your task is to compute the sum of all the digits of N, and output e ...

  5. Django -->admin后台(后台管理可以直接往数据库添加数据)

    一.使用pymysql时,必须加这两行(#如果使用mysql的数据库,请进行伪装 pymysql伪装为MySQLdb) import pymysqlpymysql.install_as_MySQLdb ...

  6. python-从酷狗下载爬取自己想要的音乐-可以直接拿来体验哟

    因为最近发现咪咕音乐版权好多,当时我就在想是不是可以爬取下来,然后花了一些时间,发现有加密,虽然找到了接口,但是只能手动下载VIP歌曲,对于我们学IT的人来说,这是不能忍的,于是就懒得去解密抓取了,但 ...

  7. java添加对象成功后想知道当前添加对象的id

    我使用的是springboot Mybatis写的项目,结构如下 mapper.xml(以下2个属性必须要有,主键id 一般是自动生成的) mapper.java  (注意新增的返回值不需要,一般情况 ...

  8. 【three.js第七课】鼠标点击事件和键盘按键事件的使用

    当我们使用鼠标操作three.js渲染出的对象时,不仅仅只是仅限用鼠标对场景的放大.缩小.旋转而已,还有鼠标左键.右键的点击以及键盘各种按键等等的事件.我们需要捕获这些事件,并在这些事件的方法里进行相 ...

  9. GeoGebra简单使用

    上课过程中的一些知识和一丢丢工具使用例子 1.常用的变量输入 2.好用的函数检视工具 3.使用动态的移动,关键是右键-开启跟踪 4.输入指令(推荐用英文输入,因为有提示)

  10. Present CodeForces - 1323D (思维+二分)

    题目大意比较简单,就是求一堆(二元组)的异或和. 思路:按位考虑,如果说第k位为1的话,那么一定有奇数个(二元组)在该位为1.二元组内的数是相加的,相加是可以进位的.所以第k位是0还是1,至于k为后边 ...