zoukankan      html  css  js  c++  java
  • Linux常用基本命令:三剑客命令之-awk内置函数用法

    awk的内置函数大致可以分类为算数函数、字符串函数、时间函数、其他函数等

    算数函数

    最常用的算数函数有rand函数、srand函数、int函数。

    可以使用rand函数生成随机数,但是使用rand函数时,需要配合srand函数,否则rand函数返回的值将一直不变

    ghostwu@dev:~/linux/awk$ awk 'BEGIN { print rand(); }'
    0.237788
    ghostwu@dev:~/linux/awk$ awk 'BEGIN { print rand(); }'
    0.237788
    ghostwu@dev:~/linux/awk$ awk 'BEGIN { srand(); print rand(); }'
    0.543596
    ghostwu@dev:~/linux/awk$ awk 'BEGIN { srand(); print rand(); }'
    0.524347
    ghostwu@dev:~/linux/awk$ awk 'BEGIN { srand(); print rand(); }'
    0.235681

    用int函数取整

    ghostwu@dev:~/linux/awk$ awk 'BEGIN { srand(); print 10 * rand(); }'
    7.83585
    ghostwu@dev:~/linux/awk$ awk 'BEGIN { srand(); print 10 * rand(); }'
    8.53695
    ghostwu@dev:~/linux/awk$ awk 'BEGIN { srand(); print int( 10 * rand() ); }'
    6
    ghostwu@dev:~/linux/awk$ awk 'BEGIN { srand(); print int( 10 * rand() ); }'
    8
    ghostwu@dev:~/linux/awk$ awk 'BEGIN { srand(); print int( 10 * rand() ); }'
    9

    字符串函数

    gsub函数或sub函数替换指定文本字符串

    1,不指定第三个参数,默认替换整行中匹配的字符串

    ghostwu@dev:~/linux/awk$ awk '{ gsub( "n", "N" ); print }' ghostwu.txt 
    ghostwu 20 maN
    zhaNgsaN 22
    lisi
    ghostwu 30 maN
    zhaNzhao 40 maN
    peter 20 maN
    zhaNzhao 30 maN
    ghostwu@dev:~/linux/awk$ cat ghostwu.txt 
    ghostwu 20 man
    zhangsan 22
    lisi
    ghostwu 30 man
    zhanzhao 40 man
    peter 20 man
    zhanzhao 30 man

    2,可以指定第三个参数,替换指定的范围,如第一列

    ghostwu@dev:~/linux/awk$ awk '{ gsub( "n", "N", $1 ); print }' ghostwu.txt 
    ghostwu 20 man
    zhaNgsaN 22
    lisi
    ghostwu 30 man
    zhaNzhao 40 man
    peter 20 man
    zhaNzhao 30 man

    还可以支持正则表达式

    ghostwu@dev:~/linux/awk$ awk '{ gsub( "[a-z]", "G", $1 ); print }' ghostwu.txt 
    GGGGGGG 20 man
    GGGGGGGG 22
    GGGG
    GGGGGGG 30 man
    GGGGGGGG 40 man
    GGGGG 20 man
    GGGGGGGG 30 man

    sub替换的是第一次出现的字符串

    ghostwu@dev:~/linux/awk$ awk '{ sub( "n", "N" ); print }' ghostwu.txt ghostwu 20 maN
    zhaNgsan 22
    lisi
    ghostwu 30 maN
    zhaNzhao 40 man
    peter 20 maN
    zhaNzhao 30 man

    length:获取每一行文本的长度

    ghostwu@dev:~/linux/awk$ awk '{ print $0, length() }' ghostwu.txt 
    ghostwu 20 man 14
    zhangsan 22 11
    lisi 4
    ghostwu 30 man 14
    zhanzhao 40 man 15
    peter 20 man 12
    zhanzhao 30 man 15

    index: 获取字符串的位置,没有该字符串,就是0

    ghostwu@dev:~/linux/awk$ awk '{print $0, index( $0, "n" )}' ghostwu.txt 
    ghostwu 20 man 14
    zhangsan 22 4
    lisi 0
    ghostwu 30 man 14
    zhanzhao 40 man 4
    peter 20 man 12
    zhanzhao 30 man 4

    split:字符串切割成数组,每行切割的结果存储在数组arr中,返回值为数组的长度

    ghostwu@dev:~/linux/awk$ awk '{ len = split( $0, arr, " " ); for ( i in arr ) { print i, arr[i], len } }' ghostwu.txt 
    1 ghostwu 3
    2 20 3
    3 man 3
    1 zhangsan 2
    2 22 2
    1 lisi 1
    1 ghostwu 3
    2 30 3
    3 man 3
    1 zhanzhao 3
    2 40 3
    3 man 3
    1 peter 3
    2 20 3
    3 man 3
    1 zhanzhao 3
    2 30 3
    3 man 3
    ghostwu@dev:~/linux/awk$ cat ghostwu.txt 
    ghostwu 20 man
    zhangsan 22
    lisi
    ghostwu 30 man
    zhanzhao 40 man
    peter 20 man
    zhanzhao 30 man

    asort:把数组的值从小到大排序,但是索引也发生改变了

    ghostwu@dev:~/linux/awk$ awk 'BEGIN{arr["a"] = 12; arr["b"]=5; arr["c"] = 1; arr["d"]=8; for( i in arr ) { print i, arr[i] } }'
    a 12
    b 5
    c 1
    d 8
    ghostwu@dev:~/linux/awk$ awk 'BEGIN{arr["a"] = 12; arr["b"]=5; arr["c"] = 1; arr["d"]=8; asort( arr ); for( i in arr ) { print i, arr[i] } }'
    1 1
    2 5
    3 8
    4 12

    可以是用第二个参数 用来保存原数组排序后的结果,同时原数组保持不变

    ghostwu@dev:~/linux/awk$ awk 'BEGIN{arr["a"] = 12; arr["b"]=5; arr["c"] = 1; arr["d"]=8; asort( arr, newarr ); for( i in newarr ) { print i, newarr[i] } }'
    1 1
    2 5
    3 8
    4 12
    ghostwu@dev:~/linux/awk$ awk 'BEGIN{arr["a"] = 12; arr["b"]=5; arr["c"] = 1; arr["d"]=8; asort( arr, newarr ); for( i in arr ) { print i, arr[i] } }'
    a 12
    b 5
    c 1
    d 8

    asort的返回值为数组中的元素个数

    ghostwu@dev:~/linux/awk$ awk 'BEGIN{arr["a"] = 12; arr["b"]=5; arr["c"] = 1; arr["d"]=8; len = asort( arr, newarr ); for( i in arr ) { print len, i, arr[i] } }' 
    4 a 12
    4 b 5
    4 c 1
    4 d 8

    当数组的下标为字符串时,asorti 函数会根据原数组中的下标的字母顺序进行排序

  • 相关阅读:
    浅谈前端的CSS
    浅谈前端的HTML
    python操作mysql
    简单的sql题目和解答
    子查询&视图&事务
    测试程序运行的时间
    API接口简单的写法
    数据库数据进行量化算法入库
    正则爬取二手房数据
    接口加密和破解
  • 原文地址:https://www.cnblogs.com/ghostwu/p/9098349.html
Copyright © 2011-2022 走看看