Linux 中 awk 实现 每四个一组计算每组第四个和第一个之间的差值

 

001、方法1(基本逻辑是先提取每组的第一行和第四行; 然后将没两行转换为1行;最后将第二行再减去第一行)

复制代码
[root@PC1 test2]# ls
a.txt
[root@PC1 test2]# cat a.txt                    ## 测试数据
2.699350
2.699359
2.699940
2.699946
3.075009
3.075016
3.075111
3.075118
[root@PC1 test2]# awk 'NR % 4 == 1 || NR % 4 == 0' a.txt | sed 'N; s/\n/\t/' | awk '{print $2 " - " $1 " = " $2 - $1}'         ## awk + sed 实现
2.699946 - 2.699350 = 0.000596
3.075118 - 3.075009 = 0.000109
复制代码

 

002、方法2 借助awk数组 和 条件分支实现

复制代码
[root@PC1 test2]# ls
a.txt
[root@PC1 test2]# cat a.txt                      ## 测试数据
2.699350
2.699359
2.699940
2.699946
3.075009
3.075016
3.075111
3.075118
[root@PC1 test2]# awk '{if(NR % 4 == 1) {ay1[1] = $0}; if(NR % 4 == 0) {ay1[2] = $0; print ay1[2] " - " ay1[1] " = " ay1[2] - ay1[1]}}' a.txt      ## 借助awk数组和条件分支实现 
2.699946 - 2.699350 = 0.000596
3.075118 - 3.075009 = 0.000109
复制代码

 

 。

 

003、博文中的答案

复制代码
[root@PC1 test2]# ls
a.txt  cal.awk
[root@PC1 test2]# cat a.txt          ## 测试数据
2.699350
2.699359
2.699940
2.699946
3.075009
3.075016
3.075111
3.075118
[root@PC1 test2]# cat cal.awk       ## 编辑一个awk脚本
{
ay1[NR] = $1                       
if(NR % 4 == 0)
{
first = ay1[NR - 3]
second = ay1[NR]
diff = second - first
printf("%.6f - %.6f = %.6f\n", second, first, diff )
}
}
[root@PC1 test2]# awk -f cal.awk a.txt              ## 运行程序
2.699946 - 2.699350 = 0.000596
3.075118 - 3.075009 = 0.000109
[root@PC1 test2]# cat a.txt | awk -f cal.awk        ## 运行程序
2.699946 - 2.699350 = 0.000596
3.075118 - 3.075009 = 0.000109
复制代码

 。

 

 

reference:

01、https://mp.weixin.qq.com/s?__biz=Mzg4ODA5NDEwNw==&mid=2247484651&idx=1&sn=4a449cc1008694ef080dc5f6619a67ba&chksm=cf81281ff8f6a109e336229dcf058082116f295b98eb7852b8eba1a8dd934bbae6d3ee3a53e9&mpshare=1&scene=23&srcid=0526HHs62l371OKEpnIae3cp&sharer_shareinfo=e1e29752c7114989a7f9ef318ad5baa1&sharer_shareinfo_first=e1e29752c7114989a7f9ef318ad5baa1#rd

 

posted @   小鲨鱼2018  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2022-05-26 python中删除列表中指定的元素
2022-05-26 python中删除列表的前几个元素、后几个元素
2021-05-26 c语言 9-12
2021-05-26 c语言 9-11
2021-05-26 c语言 9-10
2021-05-26 c语言中实现字符串大小写的转换
2021-05-26 c语言 9-9
点击右上角即可分享
微信分享提示