Linux Awk编程入门

这篇具有很好参考价值的文章主要介绍了Linux Awk编程入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

你好,我是悦创。

Awk是一个功能强大的文本分析工具,可以在Linux和Unix系统中进行有效的文本处理。它用于创建快速和实用的文本程序。本篇文章将介绍基础的awk编程。

1. Awk简介

Awk语言是一个强大的文本分析工具,通过它可以处理复杂的文本和数据流。它的名字来源于它的三位创造者Alfred Aho、Peter Weinberger和Brian Kernighan的姓氏首字母。

Awk以行为单位处理文本,把每一行分割成一系列字段,然后进行分析和处理。Awk可以用来进行文本报告、数据转换、文件格式化等任务。

2. Awk基础

在最基础的形式中,awk命令的语法如下:

awk '/pattern/ { action }' filename

在这个命令中,/pattern/是你想要匹配的模式,{ action }是当匹配成功时你想要执行的动作,filename是你想要处理的文件。

例如,我们想要从一个名为’students.txt’的文件中找出所有包含’John’的行,可以使用以下命令:

awk '/John/' students.txt

3. Awk动作

Awk动作是在匹配模式之后执行的命令。动作通常包括打印字段、算术运算、赋值操作等。

比如,你想打印’students.txt’文件中第二个和第三个字段,可以使用以下命令:

awk '{ print $2, $3 }' students.txt

在这里,‘$2’和’$3’代表的是每一行的第二个和第三个字段。' 1 ′ 表示第一个字段 , ′ 1'表示第一个字段,' 1表示第一个字段n’表示第n个字段。

4. Awk内建变量

Awk有一些内建的变量,这些变量在处理文本时非常有用:

  • NR:记录awk已经读取和处理的行数。
  • NF:在当前行中的字段数量。
  • FS:字段分隔符,默认是空格。

例如,我们可以使用NR变量来打印’students.txt’文件的每一行和它的行号:

awk '{ print NR, $0 }' students.txt

在这里,'$0’代表的是整个行。

5. Awk流程控制

Awk支持大部分流程控制语句,包括if,while,for等。

例如,以下是一个在每一行打印字段数量大于2的行的awk程序:

awk '{
    if (NF > 2) {
        print $0
    }
}' students.txt

这就是awk的基本介绍。虽然它可能看起来很复杂,但是一旦你

掌握了基础,你会发现awk是一个强大而灵活的工具。如果你处理的工作中经常需要处理文本,那么学习awk绝对是值得的。

语法

Awk是一种非常强大的文本处理语言,除了基本的打印和模式匹配功能外,它还具有丰富的编程语法,包括变量赋值、条件语句、循环语句、数组等。下面,我们将进一步探索Awk的这些高级功能。

1. 变量赋值

在Awk中,你可以声明并使用你自己的变量。例如:

awk '{ total += $1 } END { print total }' filename

在这个例子中,我们创建了一个名为total的变量,并在每一行把第一个字段的值添加到这个变量上。在处理完所有的行后,我们打印出total的值。

2. 条件语句

Awk支持if...else的条件语句,语法和C语言类似:

awk '{ if ($1 > 50) print "Passed"; else print "Failed" }' filename

在这个例子中,如果第一个字段的值大于50,那么打印"Passed",否则打印"Failed"。

3. 循环语句

Awk支持forwhile循环语句,语法也和C语言类似:

# 使用for循环打印每个字段
awk '{ for (i = 1; i <= NF; i++) print $i }' filename

# 使用while循环计算文件的总行数
awk '{ i = 1; while (i <= NR) i++ } END { print i-1 }' filename

4. 数组

Awk支持一维和多维数组。数组的索引可以是数字或字符串。例如,下面的脚本统计了文件中每个单词出现的次数:

awk '{
    for (i = 1; i <= NF; i++) 
        words[$i]++
} 
END { 
    for (w in words) 
        print w, words[w]
}' filename

5. 函数

Awk提供了一些内置函数,例如数学函数、字符串函数等。你也可以定义自己的函数。例如:

awk 'function max(a, b) { return a > b ? a : b } { print max($1, $2) }' filename

在这个例子中,我们定义了一个函数max,然后在每一行中使用这个函数找出第一个和第二个字段中的最大值。

以上就是Awk的一些基本编程语法,但Awk的功能远不止这些。Awk是一种非常强大的工具,如果你能熟练掌握它,它将在处理文本任务时发挥巨大的作用。

BEGIN/END

Awk是一种功能强大的文本处理语言,以上介绍的仅仅是一部分功能。除了基本的文本处理、变量赋值、条件语句、循环语句、数组和函数等基本语法外,还有很多高级特性和使用技巧,比如BEGIN/END块、模式匹配、内置变量、内置函数、自定义函数等。

  1. BEGIN/END块:BEGIN块在处理文件之前执行,常用于设置FS (字段分隔符),OFS(输出字段分隔符)等内置变量,或者进行一些初始化工作。END块在处理完所有行后执行,常用于打印总结性的信息。
awk 'BEGIN { FS=":"; OFS="-" } { print $1, $2 } END { print NR, "lines processed" }' filename
  1. 模式匹配:Awk可以使用正则表达式进行模式匹配。~操作符用于匹配,!~操作符用于不匹配。
awk '$1 ~ /[a-z]/' filename  # 打印第一个字段包含小写字母的行
awk '$1 !~ /[a-z]/' filename # 打印第一个字段不包含小写字母的行
  1. 内置变量:Awk有很多内置变量,如FS(字段分隔符),OFS(输出字段分隔符),RS(记录分隔符),ORS(输出记录分隔符),NR(当前记录数),NF(当前记录的字段数),FILENAME(当前输入文件名)等。

  2. 内置函数:Awk提供了很多内置函数,如数学函数(sin,cos,sqrt,exp,log,int,rand,srand),字符串函数(length,substr,index,match,sub,gsub,split,sprintf),时间函数(systime,strftime,mktime)等。

  3. 自定义函数:Awk支持自定义函数。

awk 'function max(a, b) { return a > b ? a : b } { print max($1, $2) }' filename

上述所有的内容仅仅是Awk的一部分功能,要深入理解和掌握Awk,还需要大量的实践和学习。文章来源地址https://www.toymoban.com/news/detail-479345.html

到了这里,关于Linux Awk编程入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux编程Shell自动化脚本】03 shell四剑客(find、sed、grep、awk)

    语法格式 参数说明 : path 是要查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔,如果未指定路径,则默认为当前目录。 expression 是可选参数,用于指定查找的条件,可以是文件名、文件类型、文件大小等等。 1. 常用expression 以下列出

    2024年02月09日
    浏览(40)
  • 《Linux操作系统编程》第九章 数据查找和筛选工具 : 了解流编辑器sed和报表生成器awk的简单使用

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月12日
    浏览(35)
  • 【python入门篇】你好python

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: Python入门,本专栏主要内容为Python的基础语法,Python中的选择循环语句,Python函数,Python的数据容器等。 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 首先,不管Python,

    2024年02月03日
    浏览(40)
  • 【Java项目】我是如何实现抢红包功能的?

    使用的就是redis的list集合,然后这里有一个意外情况就是: redis如果当前用户取出数据成功了,但是此时redis宕机了,然后aof同步失败,那么下一次恢复了后,就会拿到这条没有出队的数据,数据就出错了。 但是这个线程他是成功的,所以它可以成功的执行对数据库的操作。

    2024年02月09日
    浏览(31)
  • 你好,uv变换(新手入门向聊天教程)

    温馨提示:本文只是一篇入门聊天,不涉及代码教程,看不懂代码就跳过,没关系! 1、uv其实就是一个二维坐标系啊,就俩轴,就跟xy轴一样。 那为什么不叫xy,反而叫uv呢? 不知道,应该是为了跟空间坐标系xyz区别开来,以免在工作流程中产生误解吧吧吧。 2、uv坐标用于采

    2024年02月12日
    浏览(31)
  • 新接手一个业务系统,我是这么熟悉的

    接二连三地背锅让小猫的内心受到了前所未有的打击。这也是他职业生涯中的第一次。感兴趣的伙伴们如果想了解一下小猫怎么了,可以看一下“幂等事件”以及“缓存击穿事件”。 这天组长找小猫来到了一间会议室。 “在这么短的时间内发生了这么多的事故,我想也你心

    2024年01月21日
    浏览(29)
  • Unity可视化编程Visual Scripting学习笔记2:说你好(hello world)

    1.在Project面板新建Script Graph 2.给物体挂上该Graph 3.在Graph面板添加On Start事件节点(相当于脚本中的Start生命周期) 从Start绿色箭头出拉出,并创建print方法节点 可以看到print方法节点需要一个Message参数 从print方法节点的Message圆点拉出并选择String     在String数据节点中输入数

    2024年02月13日
    浏览(35)
  • 【Python学习篇】Python基础入门学习——你好Python(一)

     个人名片: 🦁作者简介:学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755@qq.com 🦉个人WeChat:Vir2021GKBS 🐼 本文由妄北y原创,首发CSDN 🎊🎊🎊 🐨座右铭:大多数人想要改造这个世界,但却罕有人想改造自己。 专栏导航: 妄北y系列专栏导航:   C/C++的

    2024年03月09日
    浏览(44)
  • 《你好,C语言》:从另一个视角学习并重新审视C语言的意义

    《你好,C语言》:从另一个视角学习并重新审视C语言的意义 尽管C语言诞生了这么多年,但是它依然活跃在开发者一线,不可否认的是C语言的确有它独特的魅力。本文将从一个全新的视角,重新带领大家学习领悟C语言的奥秘,希望能给读者朋友一些思考和启发。 众所周知,

    2024年02月07日
    浏览(31)
  • RHCE——十九、shell编程之awk

    欢迎来到我的博客,这里是Linux板块,配合之前RHCSA进阶,希望我的博客可以帮助到您,感谢您的阅读,有什么问题还希望一起探讨交流,感谢各位的支持,感谢! 0、RHCSA——使用Linux搭建一个简单的论坛(这里即可跳转Linux基础内容) https://blog.csdn.net/weixin_63172698/article/deta

    2024年02月09日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包