linux三剑客之AWK

目录

AWK是什么

AWK基本结构

a.txt的文本实例

AWK内置变量

 a.txt的文本实例

 AWK自定义变量

a.txt的文本实例

AWK内置函数

 a.txt的文本实例

awk高级输出

 a.txt的文本实例

排序输出

a.txt的文本实例

条件选择输出

a.txt的文本实例

控制语句 

a.txt的文本实例

AWK是什么

awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。有多种版本:New awk(nawk),GNU awk( gawk)等。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。

awk是由模式和操作组成。模式包括正则表达式、关系表达式、模式匹配表达式和(BEGIN语句块、pattern语句块、END语句块)。操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内

AWK基本结构

awk 'BEGIN{ commands } pattern{ commands } END{ commands }' file

由BEGIN语句块、用于匹配信息的语句块、END语句块三部分组成。

这三个部分是可选的。任意一个部分都可以不出现在脚本中。

执行顺序为:

  • 第一步:执行BEGIN{ commands }语句块中的语句;

  • 第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。

  • 第三步:当读至输入流末尾时,执行END{ commands }语句块。

a.txt的文本实例

a.txt内容如下

1 2 3
4 5 6 19
7 8 9 29 35
2 3 5 6 7

 我想输出每行的第一列数据。注:print表示输出,$1表示第一列

awk '{print $1}' a.txt

结果

1
4
7
2

AWK内置变量

[A][N][P][G]表示第一个支持变量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk

 $n  当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。 
 $0  这个变量包含执行过程中当前行的文本内容。
[N]  ARGC  命令行参数的数目。
[G]  ARGIND  命令行中当前文件的位置(从0开始算)。
[N]  ARGV  包含命令行参数的数组。
[G]  CONVFMT  数字转换格式(默认值为%.6g)。
[P]  ENVIRON  环境变量关联数组。
[N]  ERRNO  最后一个系统错误的描述。
[G]  FIELDWIDTHS  字段宽度列表(用空格键分隔)。
[A]  FILENAME  当前输入文件的名。
[P]  FNR  同NR,但相对于当前文件。
[A]  FS  字段分隔符(默认是任何空格)。
[G]  IGNORECASE  如果为真,则进行忽略大小写的匹配。
[A]  NF  表示字段数,在执行过程中对应于当前的字段数。
[A]  NR  表示记录数,在执行过程中对应于当前的行号。
[A]  OFMT  数字的输出格式(默认值是%.6g)。
[A]  OFS  输出字段分隔符(默认值是一个空格)。
[A]  ORS  输出记录分隔符(默认值是一个换行符)。
[A]  RS  记录分隔符(默认是一个换行符)。
[N]  RSTART  由match函数所匹配的字符串的第一个位置。
[N]  RLENGTH 由match函数所匹配的字符串的长度。
[N]  SUBSEP  数组下标分隔符(默认值是34)。

 a.txt的文本实例

参照上边a.txt文本。参照内置变量,我想计算每行有多少数据

awk '{print NF}' a.txt

结果

3
4
5
5

 我想打印第i行第i列的字段,比如第1行第1列,第2行第2列……

awk '{print $NR}' a.txt

结果

1
5
9
6

我想打印全文本,并且给每行打印行号 

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

结果

1 1 2 3
2 4 5 6 19
3 7 8 9 29 35
4 2 3 5 6 7

 AWK自定义变量

自定义变量初始化为0。

传递外部变量方法案例:

[root@localhost ~]# LT=45

[root@localhost ~]# echo | awk '{print LT}' LT=$LT
45

[root@localhost ~]# LT=45

[root@localhost ~]# echo | awk -v L=$LT '{print L}'
45 

a.txt的文本实例

我想计算每行第一列的数字和

awk '{a=a+$1} END{print a}' a.txt

结果

14

AWK内置函数

 

 a.txt的文本实例

打印第一列的平方根

awk '{print sqrt($1)}' a.txt 

结果
1
2
2.64575
1.41421

awk高级输出

print 语句可用于快速而简单的输出。若要严格按照你所想的格式化输出,则需要使用 printf 语句。

printf 不会自动产生空格或者新的行,必须是你自己来创建,所以不要忘了 \n 。

printf(format, value1, value2, ...)

 a.txt的文本实例

[root@localhost ~]# awk '{ printf("%-8s $%6.2f\n", $1, $2 * $3) }' a.txt 
1        $  6.00
4        $ 30.00
7        $ 72.00
2        $ 15.00

解读:第一个规格 %-8s 将第一列以字符串形式在8个字符宽度的字段中左对齐输出。第二个规格 %6.2f 将第二列乘第三列以数字的形式,保留小数点后两位,在6个字符宽度的字段中输出。

排序输出

a.txt的文本实例

[root@localhost ~]# awk '{print $0}' a.txt | sort
1 2 3
2 3 5 6 7
4 5 6 19
7 8 9 29 35

条件选择输出

可以使用括号和逻辑操作符与 && , 或 || , 以及非 ! 对模式进行组合。

a.txt的文本实例

把第一列大于3的行输出

[root@localhost ~]# awk '$1>3 {print $0}' a.txt
4 5 6 19
7 8 9 29 35

 把第一列大于3的行或第二列大于2的行输出

[root@localhost ~]# awk '$1>3||$2>2 {print $0}' a.txt
4 5 6 19
7 8 9 29 35
2 3 5 6 7

控制语句 

if-else语句

while语句

for语句

a.txt的文本实例

把每行的数字和输出

[root@localhost ~]# awk '{a=0; for(i=1;i<NF+1;i=i+1){a=a+$i; if(i==NF){print a}}}' a.txt
6
34
88
23

把数据中大于5的数字相加求和

[root@localhost ~]# awk '{for(i=1;i<NF+1;i=i+1){if($i>5){a=a+$i}}} END{print a}' a.txt
126

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux三剑客指的是 awk、sed 和 grep。 awk 是一种用来处理文本文件的工具,它可以根据指定的模式进行自动分割并进行数据处理。 sed 是一种流编辑器,它可以对文本文件进行替换、删除和插入操作。 grep 是一种文本搜索工具,它可以在文本文件中搜索指定的字符串。 ### 回答2: Linux三剑客,分别是awk、sed和grep,它们是Linux系统中非常重要的命令行工具,它们通常被称为文本处理工具。这些工具通常被用于筛选、搜索和处理文本文件。 grep是一种常见的文本搜索工具,可以在文件和文件夹中搜索指定的字符串或正则表达式。grep可以搜索多个文件并返回匹配行的输出。它是处理日志文件或查找匹配模式的最佳工具之一。 sed是一种流编辑器,可以按照行处理文本文件。它可以通过替换、删除和插入操作来修改文件内容。在大型文件中查找并替换模式是sed的主要作用。该工具通常在文本文件中提取有用信息是常用。 awk是一种强大的文本操作工具,可以分析大型文本文件并对其进行处理。该工具可以遍历行和列,并提供强大的文本处理工具,如计算、过滤和转换数据。awk的处理速度非常快,适用于处理大型数据文件。 Linux三剑客awk是最强大的工具,它可以执行复杂的文本数据操作和转换,可大大简化开发和管理过程。sed主要用于简单的文本数据过滤和替换,而grep主要用于搜索文件和定位特定行。 总之,Linux三剑客在文本数据处理方面具有不可替代的重要作用。对于Linux操作系统的开发人员和管理员来说,熟练使用这些工具可以提高他们的工作效率,使他们更容易管理和操作文本文件。 ### 回答3: Linux三剑客awk sed grep是我们在日常工作中经常使用的三个命令。它们都属于文本处理工具,可以用于查找、处理、分析文本文件等。 首先,grep是最常用的文本搜索工具。grep可以用来快速查找文件中指定的字符串或正则表达式,并将包含该字符串或正则表达式的行打印出来。常用的命令有grep、egrep和fgrep。比如,我们可以使用grep命令来查找一个文件中包含指定关键字的行,可以使用egrep来支持正则表达式搜索,使用fgrep来进行快速搜索,不支持正则表达式。 其次,sed是一种流编辑器,主要用于对文本文件进行替换、删除、添加、插入等操作。sed命令可以通过管道(|)将多个命令组合起来,从而进行复杂的文本操作。sed可以快速完成对文本文件的修改操作,比如替换文件中的某些内容、删除特定的行、在文件中插入新的文本等。sed的命令形式是“command", 比如"s/old/new/g",表示将old替换成new。 最后,awk是一种强大的文本处理工具,主要用于在文本文件中查找、处理以及格式化特定的字段。和grep、sed不同的是,awk更加灵活,可以在处理过程中做到数据过滤和加工,对于大数据的处理特别有用。awk命令的常用语法是"pattern {action}"。其中,pattern代表要匹配的模式,而action代表模式匹配时需要执行的动作,我们可以在其中添加处理语句来对文件进行各种处理操作,比如计算、统计、格式化等。 综上所述,Linux三剑客awk sed grep是我们在文本处理工作中不可或缺的三个工具,不同的工具可以用于处理不同的文本操作,也可以用于搭配使用,以完成更加复杂的文本处理工作。对于需要经常处理文本的人员来说,掌握这些工具是非常必要的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值