zoukankan      html  css  js  c++  java
  • awk的常用内置函数的使用【转】

    手把手教你在linux下熟悉使用awk的指令结构 (15)

    大家好,今天和大家说一下awk吧。反正正则 早晚也要和大家说,不如一点一点和大家先交代清楚了,省得以后和大家说的时候,大家有懵的感觉。。。

    其实正则里分为基础正则,和扩展正则。基础正则一般的命令就是grep和sed。而awk和egrep不止可以在基础正则内使用,还可以在扩展正则内使用。之前咱们见过sed了,其实grep和sed差不多,只是基本的语法有出入。而今天和大家说的awk,其实使用方法和egrep也差不多。

    好吧。还是照例先开始今天的理论方面的东西吧。

    手把手教你在linux下熟悉使用awk的指令结构(15)

    awk 指令结构格式

    1、确保整个awk命令用单引号括起来

    2、确保命令内所有引号成对出现

    3、确保用花括号括起动作语句,用圆括号括起条件语句

    4、确保动作语句打印的字符串及转义字符用双引号引起来。

    awk条件操作符

    手把手教你在linux下熟悉使用awk的指令结构(15)

    awk条件逻辑操作符

    手把手教你在linux下熟悉使用awk的指令结构(15)

    awk内置变量

    手把手教你在linux下熟悉使用awk的指令结构(15)

    awk中使用操作符,基本表达式可以划分为数字型,字符串型,变量型,域,数组元素

    赋值操作符 = += *= /- %= ^=

    条件表达操作符 ?

    并、与、非 || && !

    匹配操作符 ~ !~

    关系操作符 < <= == != >>

    算术操作符 + - * / % ^

    前缀和后缀 ++ --------------------------------------------------------------------------------------------------------

    awk的常用内置字符串函数

    手把手教你在linux下熟悉使用awk的指令结构(15)

    E.G

    原例文:

    [root@localhost ~]# cat wow
    M.Tansley 05/99 48311 Green 8 40 44
    J.Lulu 06/99 48317 green 9 24 26
    P.Bunny 02/99 48 Yellow 12 35 28
    J.Troll 07/99 4842 Brown-3 12 26 26
    L.Tansley 05/99 4712 Brown-2 12 30 28

    1)将整篇wow中的4全局替换成999

    [root@localhost ~]# awk 'gsub(/4/,999)' wow
    M.Tansley 05/99 9998311 Green 8 9990 999999
    J.Lulu 06/99 9998317 green 9 2999 26
    P.Bunny 02/99 9998 Yellow 12 35 28
    J.Troll 07/99 99989992 Brown-3 12 26 26
    L.Tansley 05/99 999712 Brown-2 12 30 28

    或者

    [root@localhost ~]# awk 'gsub(/4/,999,$0)' wow //默认就是$0,可以不加
    M.Tansley 05/99 9998311 Green 8 9990 999999
    J.Lulu 06/99 9998317 green 9 2999 26
    P.Bunny 02/99 9998 Yellow 12 35 28
    J.Troll 07/99 99989992 Brown-3 12 26 26
    L.Tansley 05/99 999712 Brown-2 12 30 28

    2)将用户名为M.Tansley所在行所有4替换成999

    [root@localhost ~]# awk '{if($1=="M.Tansley") gsub(/4/,999); print $0}' wow
    M.Tansley 05/99 9998311 Green 8 9990 999999
    J.Lulu 06/99 48317 green 9 24 26
    P.Bunny 02/99 48 Yellow 12 35 28
    J.Troll 07/99 4842 Brown-3 12 26 26
    L.Tansley 05/99 4712 Brown-2 12 30 28

    3)将用户名为M.Tansley所在行第三列的所有4替换成999

    [root@localhost ~]# awk '{if($1=="M.Tansley") gsub(/4/,999,$3); print $0}' wow
    M.Tansley 05/99 9998311 Green 8 40 44
    J.Lulu 06/99 48317 green 9 24 26
    P.Bunny 02/99 48 Yellow 12 35 28
    J.Troll 07/99 4842 Brown-3 12 26 26
    L.Tansley 05/99 4712 Brown-2 12 30 28

    4)将用户名为M.Tansley所在行第三列的所有4替换成999,并且仅显示替换行

    [root@localhost ~]# awk '{if($1=="M.Tansley") {gsub(/4/,999,$3); print $0}}' wow
    M.Tansley 05/99 9998311 Green 8 40 44

    5)将用户名为M.Tansley所在行第一个出现的4替换成999,

    [root@localhost ~]# awk '{if($1=="M.Tansley") sub(/4/,999); print $0}' wow
    M.Tansley 05/99 9998311 Green 8 40 44
    J.Lulu 06/99 48317 green 9 24 26
    P.Bunny 02/99 48 Yellow 12 35 28
    J.Troll 07/99 4842 Brown-3 12 26 26
    L.Tansley 05/99 4712 Brown-2 12 30 28

    5)将用户名为M.Tansley所在行第一个出现的4替换成999 , 并且仅显示替换行

    [root@localhost ~]# awk '{if($1=="M.Tansley") {sub(/4/,999); print $0}}' wow
    M.Tansley 05/99 9998311 Green 8 40 44

    6)查询字符串Bunny中ny是第几个出现的字符。

    [root@localhost ~]# awk 'BEGIN {print index("Bunny","ny")}' grade.txt
    4

    7)查询字符串J.Troll的字符长度是多少?

    [root@localhost ~]# awk '$1=="J.Troll" {print length($1),$1}' grade.txt
    7 J.Troll

    8)分别测试字符串&ldquo;ANCD&rdquo;中是否包含字符 d 或 C 或 D,如果没包含返回字符0,如果包含返回时第几个出现

    字符。

    [root@localhost ~]# awk 'BEGIN {print match("ANCD",/d/)}'
    0
    [root@localhost ~]# awk 'BEGIN {print match("ANCD",/C/)}'
    3
    [root@localhost ~]# awk 'BEGIN {print match("ANCD",/D/)}'
    4

    9)显示字符串L.Tansley中从第1个字符(包含)开始的后面共5个字符

    [root@localhost ~]# awk '$1=="L.Tansley" {print substr($1,1,5)}' grade.txt
    L.Tan

    显示字符串L.Tansley中从第2个字符(包含)开始的后面共3个字符

    [root@localhost ~]# awk '$1=="L.Tansley" {print substr($1,2,3)}' grade.txt
    .Ta

    10)用printf格式化awk的输出

    [root@localhost ~]# awk 'BEGIN{printf
    "%-60s","-------------------------------------------------------------"}{printf
    "%-15s %s %-15s %s %s",$1,"|",$3,"|",$5}' grade.txt M.Tansley | 48311 | 8 J.Lulu | 48317 | 9 P.Bunny | 48 | 12 J.Troll | 4842 | 12 L.Tansley | 4712 | 12 [root@localhost ~]# awk 'BEGIN{printf "%-39s","----------------------------------------";printf "%-15s %s %-15s %s %-1s %s","name","|","student_id","|","age","|";printf "%-52s","----------------------------------------"}{printf "%-15s %s %-15s %s %-3s %s",$1,"|",$3,"|",$5,"|"}END{printf "%-39s","----------------------------------------"}' grade.txt name | student_id | age | ---------------------------------------- M.Tansley | 48311 | 8 | J.Lulu | 48317 | 9 | P.Bunny | 48 | 12 | J.Troll | 4842 | 12 | L.Tansley | 4712 | 12 | ----------------------------------------------------------------------------------------------------------------------------

    今天的课程,就讲解到这里吧。

    实在是不知道要写什么了,周末下午回北京,这车堵的。。。实在是累坏了。晚上又帮一个粉丝一个散件一个散件的攒机器。终于是又给他省了一笔钱啊。。。写完了才发现,昨天你们都没给我评论今天具体要写什么。。。我这还是突然想到之前只写了sed,今天打算把awk写完,才写的这个。。。

    你们的基础如果都没问题的话,那我明天不写基础的东西了。。。实在是不知道大家需要什么东西啊,是不是都感觉随便搭建一个服务很有学习效果?那样学习的更有感觉???那为什么看vi/vim的和YUM的,也很多啊。。。苦恼中。。

  • 相关阅读:
    Enterprise Library Policy Injection Application Block 之三:PIAB的扩展—创建自定义CallHandler(提供Source Code下载)
    一首最好听的足球队歌,见证往日的辉煌
    WCF后续之旅(10): 通过WCF Extension实现以对象池的方式创建Service Instance
    WCF后续之旅(9): 通过WCF双向通信实现Session管理[下篇]
    WCF后续之旅(7):通过WCF Extension实现和Enterprise Library Unity Container的集成
    WCF后续之旅(8):通过WCF Extension 实现与MS Enterprise Library Policy Injection Application Block 的集成
    ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline Part II
    WCF后续之旅(9):通过WCF的双向通信实现Session管理[上篇]
    WCF后续之旅(1): WCF是如何通过Binding进行通信的
    Enterprise Library Policy Injection Application Block 之二: PIAB设计和实现原理
  • 原文地址:https://www.cnblogs.com/paul8339/p/7686853.html
Copyright © 2011-2022 走看看