linux命令之awk详解

本文详细介绍了Linux环境下的awk命令,包括awk的基本概念、命令组成、行处理、模式匹配、BEGIN和END语句块的使用,以及循环和判断语句。awk通过其强大的文本处理能力,常用于处理log文件和统计工作。文章还涵盖了awk中的变量、操作符、函数及内置变量,是学习awk不可或缺的参考资料。
摘要由CSDN通过智能技术生成

awk是什么

       awk是linux环境下的一个命令行工具,但是由于awk强大的能力,我们可以为awk工具传递一个字符串,该字符串的内容类似一种编程语言的语法,我们可以称其为Awk语言,而awk工具本身则可以看作是Awk语言的解析器。就好比python解析器与Python语言的关系。我们一般使用awk来做什么,awk又适合做什么工作呢。由于awk天生提供对文件中文本分列进行处理,所以如果一个文件中的每行都被特定的分隔符(常见的是空格)隔开,我们可以将这个文件看成是由很多列的文本组成,这样的文件最适合用awk进行处理,其实awk在工作中很多时候被用来处理log文件,进行一些统计工作等。

awk命令的一般组成

awk最常用的工作一般是遍历一个文件中的每一行,然后分别对文件的每一行进行处理,一个完整的awk命令形式如下:

awk  [options]  'BEGIN{ commands } pattern{ commands } END{ commands }'  file

其中options表示awk的可选的命令行选项,其中最常用的恐怕是 -F 它指定将文件中每一行分隔成列的分隔符号。而紧接着后面的单引号里面的所有内容是awk的程序脚本,awk需要对文件每一行分割后的每一列做处理。file则是awk要处理的文件名称。让我们通过demo来体会awk的功能。

awk对每一行进行分割处理

echo '11 22 33 44' | awk '{print $3" "$2" "$1}'

输出:33 22 11

       我们将字符串 11 22 33 44 通过管道传递给awk命令,相当于awk处理一个文件,该文件的内容就是 11 22 33 44 上面的命令中我们并没有添加 -F 指定分割符号, 实际上默认情况下awk使用空格分割每一行, 如果需要指定别的字符则使用-F显示指定。上面的命令是将 11 22 33 44 通过空格(不管列之间有多少个空格都将当作一个空格处理)分割成4列,在awk中有一种通过 $数字 引用的变量,这种变量引用的内容就是当前行中分割的每一列的内容,数字的序号从1开始,例如$1表示第1列的内容,$2表示第二列,以此类推。$0 表示当前整行的内容。print是awk的内置函数,用于打印出变量的值。 而我们在$3 $2 $1 之间添加了用双引号引起来的空格,如果没有,则这些变量的值打印出来会连在一起。这里的awk命令中{}里面的内容实际上是我们上面完整模式的中间部分,我们省略了上面的BEGIN块,END块,并且中间的程序块我们也省略掉了pattern部分,也就是如果不添加BEGIN或者END说明那么该程序块就是上面完整模式中的中间的那个程序块,该中间的程序块所执行的操作就是循环处理文件内容的每一行,如果文件有10行,那么中间的程序块要运行10次,每一次处理一行的内容,并且处理完当前行之后,下次循环会自动依次处理接下来的行内容。

我们来看看,如果有两列是什么效果呢,例如

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值