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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!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