awk - 如何使用awk从最后一条记录中减去多列中的值等等?
问题描述
我需要有关 AWK 中此脚本的帮助。对于每一列的每个字段,我想像这个例子一样减去值:
2007 - 2004 = 3
505 - 505 = 0
386 - 386 = 0
等等接下来的列...
我的文件格式如下
20200224 09:00:50 1998 503 384 439 110 132 126 17 0 26 29 14 2 0 4 21 0 0
20200224 09:00:55 2003 503 386 440 110 132 126 17 0 26 29 14 2 0 4 21 0 0
20200224 09:01:00 2004 505 386 444 110 132 126 17 0 26 29 14 2 0 4 21 0 0
20200224 09:01:01 2007 505 386 446 110 132 126 17 0 26 29 14 2 0 4 21 0 0
像这样的输出格式:
20200224 09:00:50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20200224 09:00:55 5 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20200224 09:01:00 1 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20200224 09:01:01 3 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
解决方案
这个 awk 单行代码将帮助您:
awk '{for(i=3;i<=NF;i++){t[i]=$i;$i=NR==1?0:$i-a[i];a[i]=t[i]}}7' file
使用您的数据进行测试:
kent$ cat f
20200224 09:00:50 1998 503 384 439 110 132 126 17 0 26 29 14 2 0 4 21 0 0
20200224 09:00:55 2003 503 386 440 110 132 126 17 0 26 29 14 2 0 4 21 0 0
20200224 09:01:00 2004 505 386 444 110 132 126 17 0 26 29 14 2 0 4 21 0 0
20200224 09:01:01 2007 505 386 446 110 132 126 17 0 26 29 14 2 0 4 21 0 0
kent$ awk '{for(i=3;i<=NF;i++){t[i]=$i;$i=NR==1?0:$i-a[i];a[i]=t[i]}}7' f
20200224 09:00:50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20200224 09:00:55 5 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20200224 09:01:00 1 2 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20200224 09:01:01 3 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
推荐阅读
- javascript - 伪类之间的元素转换时样式不一致
- javascript - Sinon 模拟一个类及其在打字稿中的方法
- c# - 为什么错误:需要 Microsoft.Web.Infrastructure.dll?
- python - 在python中将不确定的值替换为1.0
- pdf - 无法将 graphviz 和 dtreeviz 的视觉效果转换为 PDF
- perl - 从函数打印字段
- android - AndroidStudio中的代码辅助和调试外部C++代码
- javascript - scrollIntoView 间歇性地无法降落在正确的位置
- sql - SUM 函数有时需要超过 30 秒
- sql - 客户/材料对统计过去 3 年的发生情况并设置状态标志。- aws红移