学习Linux的AWK命令:掌握Begin和End的使用技巧 (linux awk begin end)

AWK命令是一种文本处理工具,通常用于在Linux系统中对文本数据进行过滤、格式化和统计等操作。其中,Begin和End是AWK命令中的两个特殊操作,它们可以帮助我们在处理文本数据时更加高效和灵活地实现我们的需求。本文将介绍如何掌握Begin和End的使用技巧,让你在学习和使用AWK命令时更加得心应手。

一、Begin操作的使用技巧

Begin操作是AWK命令中的一个特殊操作,它表示在处理文本行之前执行的操作。我们可以利用该操作来进行一些初始化设置,例如打印表头、初始化变量等。下面是一个示例:

aw ‘{BEGIN{print “ID\tName\tScore”}}’

上述代码表示在处理文本数据之前,先打印出一个表头,其中ID、Name和Score分别代表着数据的三个字段。

除了可以打印表头,Begin操作还可以进行其他一些设置。例如,我们可以在这里使用变量并初始化它。下面是一个示例:

awk ‘{BEGIN{count=0;}}/pattern/{count++}END{print count;}’ file.txt

上述代码表示在处理文本数据之前,先初始化变量count并将它赋值为0。接着,在每一行数据中查找pattern,并使count加一。利用End操作打印count的值。

二、End操作的使用技巧

End操作是AWK命令中的另一个特殊操作,它表示在处理文本行结束后执行的操作。我们通常可以在该操作中进行一些最终的计算、输出结果等工作。下面是一个示例:

awk ‘{sum+=$1} END {print “Sum = “, sum}’ numbers.txt

上述代码表示在处理文本数据结束后,计算所有数据的和并打印出来。其中,$1表示数据中的之一个字段,sum表示所有数字的总和。

除了可以进行计算和结果输出之外,End操作还可以进行其他一些工作。例如,我们可以在这里输出更大或最小值、输出平均值等。下面是一个示例:

awk ‘BEGIN {max = 0} {if ($1>max) max=$1} END {print “Max =”, max}’ numbers.txt

上述代码表示在处理文本数据结束后,输出所有数字中的更大值。其中,max变量用于保存更大值,if语句用于寻找新的更大值。

三、其他使用技巧

除了掌握Begin和End的使用技巧之外,还有一些其他的使用技巧可以帮助我们更好地处理文本数据。下面是一些示例:

1. 字段分割

有时候,文本数据中的各个字段是以某种特殊的符号(例如逗号、冒号等)进行分割的。我们可以使用AWK命令的-F选项来设置字段分隔符。例如,下面的代码表示将逗号作为文件ms.csv中字段的分隔符:

awk -F ‘,’ ‘{print $1,$4}’ ms.csv

上述代码表示打印出文件ms.csv中之一个字段和第四个字段。

2. 条件过滤

有时候,我们只需要处理满足某些条件的数据行。我们可以在AWK命令中使用条件判断语句来实现这一目标。例如,下面的代码表示只处理分数大于80的行:

awk ‘$3>80’ scores.txt

上述代码表示输出文件scores.txt中分数大于80的数据行。

本文介绍了学习Linux的AWK命令中Begin和End的使用技巧,并提供了一些其他的使用技巧。通过掌握这些技巧,我们可以更加高效地处理文本数据,提高我们的工作效率。

相关问题拓展阅读:

Linux的awk、grep、sed工具,实现文本查找、编辑 、格式化

awk、grep、sed是linux文本操作的三大利器,grep适合单纯的查找或文本匹配,sed适合编辑匹配到的文本,awk适合格式化文本,对文本进行较复杂格式处理。

命令格式:grep pattern file 用于过滤/搜索的特定字符,可与正则表达式配合,使用上十分灵活。

命令格式:sed ‘ command’ file(s) 用于编辑一个或多个文件, 简化对文件的反复操作。

演示实例:

命令格式:awk ‘BEGIN{ action;… } pattern{ action;… } END{ action;… }’ file … 用于在linux下对文本和数据进行处理,数据可以来自一个或多个文件,支持用户自定义函数和动态正则表达式等功能。

演示实例:

a.随机取用户

cat file1 | awk ‘{ print rand(),$1 }’ |sort -k1 |awk ‘{ print $2 }’ |head

b.分组求和

awk ‘{s += $2}END{ for(i in s){ print i, s } }’ file1 > file2

c.求和

cat data|awk ‘{sum+=$1} END {print “Sum = “, sum}’

d.求平均

cat data|awk ‘{sum+=$1} END {print “Average = “, sum/NR}’

e.求标准偏差

cat $FILE | awk -v ave=$ave ‘扰绝{sum+=($1-ave)^2}END{print sqrt(sum/(NR-1))}’

f.列换成行,如果之一列相同,将所有的第二列 第三列 都放到一行里面

awk ‘正宽{qq=qq(” “$2” “$3)}END{for(i in qq)print i,qq}’

g.合并文件,2个文件,每个2列,将举李亮他们按照之一列相同的数,来合并成一个三列的文件,同时,将每个文件中针对之一列对应第二列中没有的数补0

Unix & Linux的文本处理工具 — grep, sed & awk

当大家看到标题时脑中闪过的大概是铺天盖地baidu, google出来的冗余的各类使用介绍,老生常谈希望能让大家对这三个文本工具有新的理解。

grep不做过多的介绍, 打印出匹配的行, 着重点在于输出结果并不对文本本身做修改。

有个关于grep的小故事, 从sed和grep能追溯到最初的unix行编辑器ed而grep的命名代表 g(全局)/re(正则表达式)/p(打印)正是ed中全局打印行匹配的语法. grep自身的劣势在于无法实现多行匹配, 这时sed和awk相继出现弥补了grep的不足。

在进入sed的相关讨论之前,先就sed跟awk之间进行简单的比较。

可使用指定的脚本文件对相应文本进行编辑。

sed -f ‘script filename’ or stdin

awk -f ‘script filename’ or stdin

默认敬饥慎全局匹配并且拥有自身的主输入循环。

除去肢绝影响控制流的命令或语句(sed中: t,b; awk中continue,break等)默认对文本的每一读取的行依次执行相应的命令或语句。

awk相较于文本编辑工具更像是一门语言,awk条件、循环、判断语句有显性的标识(if,while,for…);而sed只存在单一的判断逻辑(参考b label,t label)。

取出upstream awk_test对应的配置块:

Solution1:

Solution2:

相较之下Solution 2不需要复杂的判断,只需通过寻址来匹配并打印相应的文本;Solution 1更适合于进行多行匹配并替换。另一方面,Solution 1中sed通过创建多行空间模式并输出,而awk通过修改记录分隔符来实现多行匹配的不同。

awk拥有系统变量(FS,RS,OFS,ORS…)、内置函数、数组数据结构、传参(-v var=value)、引用系统命令(通过system() getline() close()函数)等。

awk除去主输入循环还存在BEGIN和END过程,用于某些在处理输入之前或者处理输入完成之后的操作。

sed也有过人之处,如果对sed的工作模式进行深入了解,会发现有一个叫做保持空间(hold space)的东西,下图大体描述了sed的工作模式,并且阐述了模式空间(pattern space)跟保持空间(hold space)之间的联系。模式空间跟保持空间中的内容可进行删除,交换等。

sed的指令集都是单一的字母,并且有option可直接修改文件。而awk可能需要指定内置变量的值,或是通过输出重定向保存为新的文件。

综上所述:

grep适用于单行匹配打印的场景;

sed适用于多行模式的替换的场景;

awk适合更多的逻辑表达式并输出的场景。

但三个命令都需要文本格式统一化的大前提,对于一个文本中的多种格式,可以亮敬先将同一种格式的内容整理到文件中,再将其他格式再分别整理到新的文件中。

统一文本格式固然重要,能准确匹配意图的正则表达式也必不可少,这也是大家头疼的部分。如若有机会,我会再跟大家介绍文本匹配中磨人的小妖精——正则表达式。它在不同的命令中、语言中支持不同的标准,更易于与Unix-like系统的file globbing混淆,常常让人咬牙切齿,欲罢不能。

Linux下批量获取文件夹的子文件的所有图片的文字

任务要求

:批量获取指定文件夹内所有的子目录结构的图片的文字,输出时按照各燃迹消皮知级目州核录空一个输出。

例如:motifs/prodfi/noden/pic.png

解决方法

计算文件大小

du -sh 查看当前目录的大小

df -h 查看主机所有盘的空间情况

du -h 查看当前目录下所有文件的大小

ls -lh *.sam|awk ‘BEGIN{sum=0}{sum=sum+$5}END{print sum} 查看当前目录sam文件的总大小。

linux awk begin end的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux awk begin end,学习Linux的AWK命令:掌握Begin和End的使用技巧,Linux的awk、grep、sed工具,实现文本查找、编辑 、格式化,Unix & Linux的文本处理工具 — grep, sed & awk,Linux下批量获取文件夹的子文件的所有图片的文字的信息别忘了在本站进行查找喔。


数据运维技术 » 学习Linux的AWK命令:掌握Begin和End的使用技巧 (linux awk begin end)