如何用Shell脚本计算文件中每行首个字段的差值?
Shell脚本:计算文件相邻行首个数值字段的差值
针对你需要计算指定文件中每行首个数值字段与下一行对应字段差值的需求,这里有个简洁且易维护的awk实现方案,完全适配你的场景:
完整命令脚本
awk 'NR>1{print prev - $1} {prev=$1}' your_target_file.txt
代码逻辑解释
NR>1:控制从第二行开始执行差值计算——毕竟第一行没有上一行的数值可以用来对比print prev - $1:输出上一行首个数值字段(存在prev变量中)减去当前行首个数值字段($1)的结果{prev=$1}:每处理完一行,就把当前行的首个数值字段存入prev,供下一行计算时调用
实际测试示例
假设你的输入文件data.txt内容如下:
0.607401 # Tue Mar 27 04:30:01 IST 2018
0.607401 # Tue Mar 27 04:35:02 IST 2018
0.606325 # Tue Mar 27 04:40:02 IST 2018
0.606223 # Tue Mar 27 04:45:01 IST 2018
0.606167 # Tue Mar 27 04:50:02 IST 2018
0.605716 # Tue Mar 27 04:55:01 IST 2018
0.605716 # Tue Mar 27 05:00:01 IST 2018
0.607064 # Tue Mar 27 05:05:01 IST 2018
执行上述命令后,会得到如下输出:
0 -0.001076 -0.000102 -0.000056 -0.000451 0 0.001348
这个写法比你提到的getline方案更简洁易懂,还能避免getline在处理文件边界时可能出现的异常问题。
内容的提问来源于stack exchange,提问作者getashu1
相关产品推荐
相关产品推荐

