linux - 具有多个列的文件中的前一个值减去后一个值后如何获得绝对值?
问题描述
我有一个包含数字的文件。
1 34 44 44 46
5 35 40 40 45
6 36 28 30 40
我的目标是让每一列在前一个值减去以下值后具有绝对值,如下所示:
1 34 44 44 46
4 1 4 4 1
1 1 12 10 5
我用了
cat File.txt | awk '{for(i=1; i<=$i-1 ;i++)$i=(a[i]-=$i)}END{print $1 >=0 ? $1 : 0 - $1}'
但我只得到了第一列减法的绝对值。我也尝试了 $0 而不是 $1 但我没有得到正确的输出。有谁知道如何改进上述命令以获得我想要的输出?
解决方案
测试.awk
function abs(x){
return ((x < 0.0) ? -x : x)
}
{
for(i=1; i<=$i ;i++) {a[i]=abs(p[i]-$i)}
}
{
for(i=1; i<=$i ;i++) {p[i]=$i;}
}
/[0-9]/{
for (i in a) {printf "%s ",a[i]};print "";print ""
}
运行如下:
awk -f test.awk <path_to_your_file>
推荐阅读
- python - Pandas - 根据 id 向每一行添加单独的 Z 分数
- autotools - Autotools 处理本地与已安装数据文件的方法
- c# - 使用实体框架将数据保存到 SQL Server 时的外键问题
- wordpress - WooCommerce 预购未触发 Google Analytics 转换
- swift - 快速从 If 语句中返回一个字符串
- android - 如何在内部 SeekBar 上禁用 ScrollView 的工作?
- c++ - 如何获得触发它的变量下面的所有值?
- firebase - 在 Firestore Snapshot Query 的本地快照副本上进行离线查询
- javascript - 选择活动标签时,如何使手风琴侧边栏过滤器部分保持打开状态?
- python - 使用 Beuatiful Soup 匹配标题中的特定文本