首页 > 其他分享 >文本处理语言awk基本语法

文本处理语言awk基本语法

时间:2024-04-05 09:01:09浏览次数:23  
标签:运算符 arr BEGIN else 语法 循环 awk 文本处理

文章目录

awk语言初步

AWK 是一种强大的文本处理和数据解析工具,它支持丰富的运算符和流程控制语句。运算符方面,AWK 提供了基本的算术运算符(+, -, *, /, %, ^, **)和赋值运算符(+=, -=, *=, /=, %=, ^=),以及递增递减运算符(++, --, a++, a–)。此外,AWK 还支持关系运算符(==, !=, <, <=, >, >=)和逻辑运算符(&&, ||, !)。

在流程控制方面,AWK 提供了判断语句(if…else if…else)和循环语句(for, while, do…while)。通过这些流程控制语句,用户可以实现复杂的逻辑判断和循环遍历。

运算符

运算符备注
+, -, *, , %, ^, \加减乘除、取模、乘方、乘方
+=, -=, *=, =, %=, ^=加减乘除、取模、乘方对应的复制符
++a, --a, a++, a–前置递增、前置递减、后置递增、后置递减
==, !=, <, <=, >, >=关系运算符,返回真假
&&, ||, !逻辑运算符:与或非

awk也支持三元运算符,例如

$ awk 'BEGIN { a = 10; b = 20; (a > b) ? max = a : max = b; print "Max =", max}'
Max = 20

除了单个值的计算,awk还提供了适用于其他数据类型的运算符

  • 字符串连接:空格
  • 数组遍历:【in】
  • 匹配:【~】;不匹配【!~】

数组遍历的方法为:

BEGIN {
    arr[0] = 1; 
    arr[1] = 2; 
    arr[2] = 3; 
    for (i in arr) 
        printf "arr[%d] = %d\t", i, arr[i] 
    print "\n"
}

调用结果为:

awk -f test.awk
arr[0] = 1      arr[1] = 2      arr[2] = 3

流程控制

编程语言的流程控制,主要包括判断和循环。

其判断语句就是if...else if...else的结构:

$ awk 'BEGIN{num=10; if(num%2==0){printf "%d is even\n", num }else{printf "%d is odd"}}'
10 is even

循环在前面的例子也出现过,包括for循环、while循环以及do{}while(),其逻辑与C语言极度相似,故只列一例不做详述。

$ awk 'BEGIN { for (i = 1; i <= 5; ++i) printf "%d\t",i }'
1       2       3       4       5
$ awk 'BEGIN{ i=1; while(i<5){printf "%d\t", i; i++}}'
1       2       3       4
$ awk 'BEGIN{ i=1; do{printf "%d\t", i++}while(i<5)}'
1       2       3       4

在循环中可以通过break和continue来结束或跳过本层循环,这也同样与C语言雷同。此外,awk还有一个关键字exit,类似于return 0,可以跳出当前程序。

函数封装

【function】是awk语言中用于封装函数的关键字,示例如下

# 文件 fcunTest.awk
function fac(n){
    if(n>1)
        return n*fac(n-1)
    else
        return 1
}
BEGIN{
    printf "5+1=%d", fac(5)
}

这是个递归求阶乘的函数,调用结果为

$ awk -f funcTest.awk
fac(5)= 120

在这里插入图片描述

标签:运算符,arr,BEGIN,else,语法,循环,awk,文本处理
From: https://blog.csdn.net/m0_37816922/article/details/137391497

相关文章

  • django渲染模板与vue的语法冲突解决Flask框架默认WSGI:Werkzeug
    django渲染模板与vue的语法冲突解决Flask框架默认WSGI:Werkzeug Python来说,它有很多web框架,常见的有jango、Flask、Tornado、sanic等,比如Odoo、Superset都基于Flask框架进行开发的开源平台,具有强大的功能。在Linux下,默认使用的WSGIServer一般为Gunicorn,它是一个比较出名的We......
  • CSS基础:语法、注释以及注释的3个注意事项
    你好,我是云桃桃。一个希望帮助更多朋友快速入门WEB前端的程序媛。1枚程序媛,大专生,2年时间从1800到月入过万,工作5年买房。分享成长心得。259篇原创内容-公众号后台回复“前端工具”可获取开发工具,持续更新中后台回复“前端基础题”可得到前端基础100题汇总,持续更新中今......
  • main方法语法
    main()方法的形式:publicstaticvoidmain(String[]args){}java虚拟机需要调用类的main方法(main方法是Java虚拟机调用),所以该方法访问访问权限必须是public(Java虚拟机与main方法不在同一个类)。java虚拟机在执行main()方法时不必创建对象,所以该方法必须是static该方法接受Stri......
  • 解构赋值语法
    解构赋值语法 概述解构赋值语法(destructuringassignment)是ECMAScript6(ES6)引入的新特性,允许我们从数组或对象中提取值并将其赋值给变量。它可以简化代码,并提供了一种方便的方式来访问和使用复杂数据结构的值。解构赋值的语法有两种形式:数组解构和对象解构。示例数组解......
  • swift ui 语法基础
    importSwiftUIstructStudyView:View{@Statevarshow=false//动态改变的变量前面需要声明[@State]varname="字符串123"//静态的变量不需要加[@State]varbody:someView{VStack{Toggle("切换",isOn:$show)//控件......
  • Go语言基础语法
    1.概述简介:Go(Goland),一种静态强类型、编译型语言。功能:内存安全,GC(垃圾回收),结构形态及CSP-style并发计算特点:Google开发,可靠天生支持并发(最显著特点)语法简单,容易上手内置runtime,支持垃圾回收可直接编译程机器码,不依赖其他库丰富的标准库跨平台编译应用领域:服务器......
  • Python语法学习三之函数
    一、简单函数定义和调用def函数名():代码#无参数,无返回值的函数defprintName():print"cehae"printName()#无参数,有返回值的函数defgetAge():return18printgetAge()#有参数,无返回值的函数defprintSex(sex):printsexpr......
  • Python语法学习四之IO操作
    一、文件操作1-1、打开/创建文件在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件open(文件名,访问模式)f=open('C:/Users/cehae/Desktop/test.txt','w')访问模式1-2、关闭文件close()f=open('C:/Users/cehae/Desktop/test.txt','r')#关闭文......
  • Python语法学习五之面向对象
    一、面向对象11-1、定义类语法:class类名:方法列表#定义类classCar:defgetCarInfo(self):#定义属性,和Java等语言差别很大。print('车轮子个数:%d,颜色%s'%(self.wheelNum,self.color))defmove(self):print("车正在移......
  • Java登陆第三十六天——VUE3响应式入门、setup语法糖
    当浏览器接收到服务端返回的页面后,浏览器会把页面解析成DOM树,DOM树中各个元素会相应的显示在浏览器上。VUE提供的响应式数据可以在页面不刷新的情况下更新数据。响应式数据App.vue<script>//等价于setup语法糖。固定的写法,不会改。exportdefault{setup(){letsum......