Linux awk命令原来可以干那么多事

 这里假设读者还是有点Linux 基础(敲过一些linux 命令).haha...

awk是一个强大的文本分析工具,生产中,我们也会经常用到,这里我就列举一下作为开发人员,常用的一些操作

开发人员在开发过程中,其实很要在Linux环境下操作,更多的是上线后的一些分析协查,就比如我们经常会分析程序导出,下载的一些文件有没有问题,本文也是基于这么一个场景,列举一些常用操作

举例中用到的文件我上传了,大家可自己下载,以下命令可以直接执行查看结果(记得文件要到执行的目录下)。

假设我们的文件“awk_demo.txt” 是一个订单的明细文件,第一行是汇总,第二列是订单号,第四列是金额

举例1: 要统计一下总金额

awk -F '|' '{print sum+=$4}end{printf sum}' awk_demo.txt

结果如下:

金额累加了没问题,但第一行不对,第一行是汇总,不应该被统计进去

知识点分析:

-F '|' 这里是把文件里的行用“|”分割,如果你的文件不是以“|”分割,你就可以替换成相应的分割符

$4 是个变量,这里就是我们想要取的列,如果是第一列就可以$1,以此类推,有些程序猿的思维觉得第一列不应该是$0么?

确实有$0 但它不是第一列,它是awk的内置变量 ,代表的是当前记录(这里表一整行记录),感兴趣的同学自己尝试

 

修改如下:

awk -F '|' '{if(NR>1){print sum+=$4}}end{printf sum}' awk_demo.txt

结果如下:

第一行被排除了,但是最后5行显示的有点问题(是科学计数法),看不懂啊。。。。

知识点分析:

这里排除第一行我们用了一个if(NR>1), NR 也是awk的内置变量 NR是行号,代表当前处理的文本行的行号

还有一些常见的内置变量

FS:输入字段分隔符, 默认为空白字符

OFS:输出字段分隔符, 默认为空白字符

RS:输入记录分隔符(输入换行符), 指定输入时的换行符

ORS:输出记录分隔符(输出换行符),输出时用指定符号代替换行符

NF:number of Field,当前行的字段的个数(即当前行被分割成了几列),字段数量

FNR:各文件分别计数的行号

FILENAME:当前文件名

ARGC:命令行参数的个数

ARGV:数组,保存的是命令行所给定的各参数

感兴趣的同学自己尝试

 

再修改下:

awk -F '|' '{if(NR>1){printf "%.2f\n", sum+=$4}}end{printf sum}' awk_demo.txt

 结果如下:

这次最终得到了我们想要的数据(最后一行)

知识点分析:

这里用了printf 命令格式化输出,"%.2f\n" 指定为浮点数显示,保留两位小数,因为printf不会换行需显式指定换行控制符,\n

这里还有一些其它常用格式符:

%c:显示字符的ASCII码

%d, %i:显示十进制整数

%e, %E:显示科学计数法数值

%f:显示为浮点数

%g, %G:以科学计数法或浮点形式显示数值

%s:显示字符串

%u:无符号整数

%%:显示%自身

输入的字的颜色样式都可以格式化,感兴趣的同学自己尝试

 

举例2: 找出文件中重复的订单

awk -F '|' '{if(NR>1){print $2}}' awk_demo.txt |sort|uniq  -dc

结果如下:

第一列为重复的数量,第二列为订单号

知识点分析:

这里需要借助sort uniq 两个命令才能完成操作 ,sort 是结果排序 uniq 是去重 ,uniq只能对相邻(连续)的行去重,所以一般情情况下会跟sort配合使用

 -c 统计出现的次数,-d 只展示重复的行

其实awk 能干的事情要比我说的多太多,这里只只说了几个常用的用法,希望对大家有用!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux awk命令是一种强大的文本分析工具,它可以帮助用户从文本文件或标准输入中抽取信息并进行处理。下面是关于awk命令的一些基本用法、工作流程、常用选项参数说明、实操案例和常用awk的内置变量: 1. 基本用法 awk命令的基本语法为: ``` awk 'pattern {action}' file ``` 其中,pattern是一个模式,用于匹配文件中的文本;action是一个动作,用于在匹配到的文本上执行的操作;file是要处理的文件名。 2. 工作流程 awk命令的工作流程如下: - 读入文件的第一行,并根据指定的分隔符将其分割成多个字段。 - 对于每一行,awk命令都会执行pattern-action语句,如果pattern匹配成功,则执行action操作。 - 重复执行步骤2,直到文件的所有行都被处理完毕。 3. 常用选项参数说明 - -F:指定输入文件的分隔符。 - -v:定义一个变量并赋值。 - -f:指定awk程序文件的路径。 4. 实操案例 假设有一个名为test.txt的文件,内容如下: ``` Tom 20 male Jerry 18 female Mike 22 male ``` 现在我们想要从中抽取出所有男性的姓名和年龄,可以使用如下命令: ``` awk '$3=="male"{print $1,$2}' test.txt ``` 输出结果为: ``` Tom 20 Mike 22 ``` 5. 常用awk的内置变量 - $0:表示整个文本行。 - $1、$2、$3...:表示文本行中的第1、2、3...个字段。 - NR:表示awk已经读入的记录数。 - NF:表示当前记录中的字段数。 - FS:表示输入字段分隔符。 - RS:表示输入记录分隔符。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值