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,还需要大量的实践和学习。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI悦创|编程1v1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值