linux三剑客awk教你如何裁剪结果集

awk

  • awk在Linux中我们称之为输出。在Linux的终端上所有的东西我们都可以用awk来输出赋值。

  • 首先我们要知道终端的所有内容都可以简化为上图的二维结构。awk既然是输出那就需要一个坐标及跨度才能确定输出的内容
  • 输出其实包含两个一次,一个是获取一个是返回。我们往往关注的重点是返回的结果集。但是两者是缺一不可

awk内置变量

  • 在了解变量之前我们得先了解下awk的基本单元。
变量 解释 说明
记录Record 通过回车判定行
字段Field 默认通过空格分割
参数 解释
- F 指定分割字符串
-v 定义或修改awk内置变量 ; 内置变量如下
-f 读取文件内awk命令
  • 好了有了这两个关键名词之后我们再来看awk为我们内置的对象就简单很多了。
变量 功能
NR 记录的行号; Number Of Row ==NR
FNR awk [参数] [动作] file1 file2 ;此时动作中使用FNR显示行号会显示各个文件的行号,如果NR则会两个文件汇总后显示行号
NF 记录的列号: Number of Field == NF
FS 列分割符 : File Separator = FS
OFS 输出字段分割符: OUT FILE SEPERATOR = OFS
RS 行分隔符;即是换行符;比如我们行空格匹配换行。awk -v RS=" " '{print $1}' demo.txt
ORS 指定输出换行符
FILENAME 当前文件名
ARGC 命令行参数个数
ARGV 数组: 保存的是命令行锁指定的各参数名

获取数据

awk
NR==1 取出第一行
NR>=1&&NR<=5 取出一到五行范围
/tom/ 显示tom匹配的行
/tom/,/jack/ 匹配现实从lcf 到jack之间的内容
符号 > < >= <= == !=
-F 每一列结束标记
{print $num} 获取某列值 , num=0表示取出整行数据

  • 上面是获取某个结果集的指定几列并且按照自己的规格输出。
username  password fav age
 zhangsan 123 ball 13
 lisi 123 swim 15
 wangwu 1w3 eat 82
复制代码
  • 针对上面的文本我们来实现上述的几个操作

查询fav列包含2的数据

cat demo.txt | awk -F "[ ]+" '$2~/.*2.*/' 复制代码

查询fav列包含2的指定列数据

cat demo.txt | awk -F "[ ]+" '$2~/.*2.*/{print $1,$2,$NF}' 复制代码

查询zhangsan到lisi之间数据的最后一列

cat demo.txt | awk -F "[ ]+" '/zhangsan/ , /lisi/{print $NF}' 复制代码

查询2,3行数据

awk 'NR==2{print $0}NR==3{print $0}' demo.txt
复制代码

获取最后一行数据

cat demo.txt | awk 'END{print $0}' 复制代码

统计

  • awk 我们上面二维的方式输出内容。但是有时候我们想统计文本内容。比如统计关键词出现的次数啦。计算文本内容啦等等需求。这个时候awk为我们提供了两个特别的模式。BEGIN。END
模式 含义 应用场景
BEGIN{} 里面的内容会在awk读取文件前执行 1.进行简单统计计算不涉及读取文件 2.用来处理文件之前写个表头
END{} 里面的内容会在awk读取文件后执行 1.awk进行统计,一般统计:先计算,最后END输出结果 2.awk使用数组,用来输出结果
功能 shell awk
数组 array[0]=tom array[0]=tom
打印数组 echo $array[0] printf array[0]
循环 for i in ${array[*]} do echo $i done (shell中循环获取的是数组中元素) for(i in array) print array[i] (awk中获取的是元素下标)
判断 if [ "tom" -eq 18 ];then echo good fi if($NF>18) print "good" else print "bad"
  • if往往会单独使用。for往往是结合BEGIN。END使用的。假如现在我们要统计下上述文本123出现的概率
cat demo.txt | awk '{for(i=1;i<=NF;i++) if($i=="123") a++} END{print a}'
#Java##架构师##编程##后端##程序员#
全部评论
之前一直没学懂🤣
点赞
送花
回复 分享
发布于 2022-07-29 10:12

相关推荐

1 1 评论
分享
牛客网
牛客企业服务