首页 > 其他分享 >gawk进阶

gawk进阶

时间:2022-10-17 23:55:53浏览次数:44  
标签:进阶 array1 xxx gawk v1 file 数组

gawk进阶

  • 内建变量

    • 在gawk程序内部使用的变量,用于提取和处理数据

      • 字段和记录变量(通过在BEGIN设置)

        • FILEDWIDTHS

          • 设定字段宽度
        • FS

          • 输入字段分隔符(默认空格和制表符)
        • RS

          • 输入记录分隔符(默认是换行符)
        • OFS

          • 输出字段分隔符
        • ORS

          • 输出记录分隔符
      • 数据变量

        • ARGC

          • 统计命令行参数的个数
        • ARGC[0]

          • 代表全部命令行参数
        • ARGC[1]

          • 代表第一个命令行参数
        • ENVIRON

          • 使用关联数组(文本作为索引的数组)提取shell环境变量
        • FNR

          • 统计当前文件已处理的记录数
        • NR

          • 统计已处理过的记录总数
        • NF

          • 统计字段总数和指代最后一个字段
  • 数组

    • 分类

      • 数字数组

        • 使用数字作为索引
      • 关联数组

        • 使用字符串作为索引
    • 定义数组

      • 格式

        array[index]=element

    • 提取数组值

      • 单个值

        array[index]

      • 多个值

    for (var in array) { print "index=",var ---- "value=", array[var] }
    - var存储的是索引值,array[var]存储的是数值

    • 删除数组变量

      • 格式

        delete array[index]

  • 模式

    • 正则表达式

      • 注意事项

        • 正则表达式必须出现在它要控制的程序的左花括号前面
      • 使用方法

        gawk 'BEGIN{FS=","} /xxx/{print $1} ' file

        • 以逗号为分隔符,从文件中匹配xxx,如果匹配成功,则打印包含xxx的行的第一个字段
    • 匹配操作符

      • 定义

        • 把正则表达式限定在行的特定字段,只从某个字段中匹配
      • 格式

        gawk '$x ~ /xxx/{xxx}' file
        gawk '$x !~ /xxx/{xxx}' file

      • 使用方法

        gawk 'BEGIN{FS=","} $1 ~ /^xxx/{print $0}' file

        • 以逗号为分隔符,从文件中的所有行的第一个字段中查找以xxx开头的字符,如果匹配成功,则打印其所在行的所有内容

        gawk -F: '$1 ~ /xxx/{print $1,$NF}' /etc/passwd

        • 以分号为分隔符,从/etc/passwd中的第一个字段中查找xxx,如果匹配成功,则打印包含所在行的第一个字段和最后一字段

        gawk -F: '$1 !~ /xxx/{print $1,$NF}' /etc/passwd

        • 以分号为分隔符,从/etc/passwd中的第一子u按中查找xxx,如果匹配成功,则打印除了xxx所在行的其他行的第一个字段和最后一个字段
  • 数字表达式

    • 表达式

      • 等号

        • ==
      • 小于等于

        • <=
      • 小于

        • <
      • 大于等于

        • >=
      • 大于

        • >
    • 使用方法

      • 匹配字符(完全匹配)

        gawk -F: '$1 == "xxx" {print $1} ' file

        • 以分号为分隔符,从文件中的第一个字段中,查找xxx,并打印出来
      • 匹配数值

        gawk -F: '$4==0{print $1}' /etc/passwd

        • 以分号为分隔符,从/etc/passwd中的第4个字段中查找数值等于0的行(root用户组),并打印改该的第一个字段
  • 结构化命令

    • if语句

      gawk '{   if (condition)                                                        
                     {statement}     
                else                                                                
                     {statement}                                                                    
           }'   file
      
    • while语句

      gawk '{   while (condition)                                                        
                     {statement}                                                       
            }' file
      
    • do..while语句

       gawk 'do                                                                     
            {statement}                                               
            while (condition)                                        
            '  file
      
    • for语句

      gawk ' for (var assignment;conditon ; interation process)' file

  • 格式化输出

    • printf

      • 格式

        printf "format string",var1,var2....

    • 格式化指定符(format string)

      • 定义

        • 通过控制字母指明变量的类型和如何显示,作为占位符,供变量使用。另外可利用修饰符进一步控制输出
      • 格式

        % [modified] control-letter

      • 控制字母(control-letter)

        • c

          • 显示ASCII字符
        • s

          • 显示一个字符串
        • i

          • 显示一个整数
        • f

          • 显示一个浮点数
      • 修饰符(modifier)

        • width

          • 指定输出字段的最小宽度
        • prec

          • 指定小数点位数或字符串的字符数
          • 字符串左对齐

    • 使用方法

      • gawk '{ printf %s,var1}' file

        • 显示一个字符串
      • gawk '{printf %s\n, %s\n, var1, var2}' file

        • 分行显示两个字符串
      • gawk '{printf %-16s\n , var1}' file

        • 强制一个字符宽度为16个字符,并且左对齐显示
      • gawk '{printf %5.1f\n,var1}' file

        • 显示5个字符,并且保留一位小数点
  • 内建函数

    • 数学函数

      - int(x)

      • 取整

      - rand(x)

      • 生成0到1的随机数(可通过*放大)

      • int( n * rand(x))

        • 随机数取整
      • exp(x)

        • 计算x的指数
    • 位操作函数

      • and(v1,v2)

        • v1,v2与运算
      • or(v1,v2)

        • v1,v2或运算
      • xor(v1,v2)

        • v1,v2异或运算
      • lshift(v1,x)

        • v1向左移x位
      • rshift(v1,x)

        • v1向右移x位
    • 字符串函数

      • asort( array1 )

        • 把数组array1(按元素值)排序后,索引值被替换成连续数字
      • asorti( array1 )

        • 把数组array1(按索引值)排序后,索引值被替换成新的连续数字
      • asort(arary1,array2)

        • 把数组array1(按元素值)排序后,索引值被替换成连续数字,并把排序后的的数组存储在array2中
      • asorti(array1,array2)

        • 把数组array1(按索引值)排序后,索引值被替换成新的连续数字,并把排序后的数组存储在array2中
      • index(s,x)

        • 返回字符串s中,x的索引值,没有结果返回0
      • lenth( [s] )

        • 返回字符串s的长度,没有指定s则返回$0的长度
      • split( s,array1)

        • 把字符串用FS字符分割后(需要在gawk指定)存储在array1中
      • split( s, array1 , r)

        • 把字符串用正则表达式分割后,放到array1中
      • substr(s,m,n)

        • 把字符串s从m处开始截取,截取n个长度字符串
    • 时间函数

      • systime()

        • 获取系统当前时间
      • strftime(format [,timestamp] )

        • 格式化时间
      • 使用方法

        • gawk 'print strftime("%A,%B %d,%Y" , systime())'

          • %A为星期x,%B %d为月+天,%Y为年份
  • 自定义函数

    • 定义函数

      • 格式

        • function name ( [variable] ) { statements }
    • 使用函数

      • 格式
      gawk ' fuction   myfunction([variable])               
         {  statements   }            
          BEGIN{ myfunction() }'  file
      

标签:进阶,array1,xxx,gawk,v1,file,数组
From: https://www.cnblogs.com/tang-learning/p/16801181.html

相关文章

  • sed进阶
    sed进阶空间模式空间sed编辑器当前正在工作的所在行多行处理跳过行n匹配到所在行后,跳转到下一行执行操作sed'/target/{n;xxx}'file合并......
  • python爬虫从0到1 -ajax的get请求进阶
    前面说到获得了第一页的数据。而我们要获得后面的数据时,它们的url地址并不一样。详见下图:>第一页网址https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%A7%......
  • @Value进阶玩法指南(转自微信公众号苏三说技术)
    前言对于从事java开发工作的小伙伴来说,spring框架肯定再熟悉不过了。spring给开发者提供了非常丰富的api,满足我们日常的工作需求。如果想要创建bean实例,可以使用@Control......
  • python进阶之路15 之异常处理、生成器相关
    异常捕获处理1.异常异常就是代码运行报错行业术语叫bug代码运行中一旦遇到异常会直接结束整个程序的运行我们在编写代码的过程中要尽可能避免2.异常分类......
  • Vue.$nextTick的原理是什么-vue面试进阶
    原理性的东西就会文字较多,请耐下心来,细细品味Vue中DOM更新机制当你气势汹汹地使用Vue大展宏图的时候,突然发现,咦,我明明对这个数据进行更改了,但是当我获取它的时候怎么是上......
  • Scanner进阶
    Scanner进阶 packagecom.yyr.base.scanner;importjava.util.Scanner;publicclassDemo05{publicstaticvoidmain(String[]args){//我们要输......
  • 31、JAVA进阶——XML知识
    目录​​一、认识XML​​​​二、 XML文档结构​​​​1.XML声明​​​​2.标签​​​​3.根元素​​​​4.元素​​​​5.属性​​​​6.XMl中的特殊字符处理​​​......
  • Mybatis 增删改查 基础小进阶
    有部分相同不需要修改可以点击--->简单的Mybatis项目1.配置Maven依赖2.配置环境文件mybatis-config.xml3.编写MybatisUtils工具类4.编写实体类User5.实体类UserMapper......
  • Elasticsearch 进阶检索 (二)
    一、进阶检索1、Mapping1)、字段类型一、数据类型字段类型概述一级分类二级分类具体类型描述核心类型字符串类型string,text,keyword ......
  • Pytest进阶使用
    fixture特点:命令灵活:对于setup,teardown可以省略数据共享:在conftest.py配置里写方法可以实现数据共享,不需要import导入,可以跨文件共享scope的层次及神奇的yield组......