你好,我是悦创。
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支持for
和while
循环语句,语法也和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块、模式匹配、内置变量、内置函数、自定义函数等。
- BEGIN/END块:BEGIN块在处理文件之前执行,常用于设置FS (字段分隔符),OFS(输出字段分隔符)等内置变量,或者进行一些初始化工作。END块在处理完所有行后执行,常用于打印总结性的信息。
awk 'BEGIN { FS=":"; OFS="-" } { print $1, $2 } END { print NR, "lines processed" }' filename
- 模式匹配:Awk可以使用正则表达式进行模式匹配。
~
操作符用于匹配,!~
操作符用于不匹配。
awk '$1 ~ /[a-z]/' filename # 打印第一个字段包含小写字母的行
awk '$1 !~ /[a-z]/' filename # 打印第一个字段不包含小写字母的行
-
内置变量:Awk有很多内置变量,如FS(字段分隔符),OFS(输出字段分隔符),RS(记录分隔符),ORS(输出记录分隔符),NR(当前记录数),NF(当前记录的字段数),FILENAME(当前输入文件名)等。
-
内置函数:Awk提供了很多内置函数,如数学函数(sin,cos,sqrt,exp,log,int,rand,srand),字符串函数(length,substr,index,match,sub,gsub,split,sprintf),时间函数(systime,strftime,mktime)等。
-
自定义函数:Awk支持自定义函数。文章来源:https://www.toymoban.com/news/detail-479345.html
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模板网!