gpt4 book ai didi

linux - 如果同一行有 2 个字段匹配,则从同一列减去 2 个值

转载 作者:太空宇宙 更新时间:2023-11-04 03:59:00 26 4
gpt4 key购买 nike

我以这种方式得到了一个格式化文件:

1 223614 225119.537745 Engine45
2 223614 225121.082392 Engine45
3 223614 225124.440309 Engine45
4 223614 225124.763890 Engine45
5 223621 225124.933927 Engine46
6 223614 225124.934205 Engine45
7 223614 225125.354857 Engine45
8 223614 225127.603434 Engine45
.
.
.

我正在尝试制作一个 awk/shell,它需要 1)验证第 2 列和第 4 列是否在同一行中相等,如果适用,2)用第一个找到的第 1 列减去第 2 列上的第二个找到的值,应如下所示:

1) 找到的第一行:

1 223614 225119.537745 Engine45

1) 找到的第二行:

2 223614 225121.082392 Engine45

输出应该是这个的答案:

225121.082392 - 225119.537745 = 1.544647

下一个输出应该是:

第 3 行按 1) 查找:

3 223614 225124.440309 Engine45

第 4 行按 1) 查找:

4 223614 225124.763890 Engine45

输出:225124.763890 - 225124.440309 = 0.323581

并依次提供文件中的所有记录。

我相信 1) 我可以让它工作,但 2) 对我来说真的很难,但如果有人能指导如何获得可能会非常有用,我知道 shell 和 awk 的基础知识(如果有帮助的话),但我愿意使用 perl 等其他工具来完成。

问候

最佳答案

如果连续两行的值不相同并且您想跳过这些行,则可以执行以下操作:

awk '!(NR%2) && $2==col2 && $4==col4{print $3-col3}{col2=$2;col3=$3;col4=$4}' file
1.54465
0.323581
2.24858

如果您不想跳过这些行并按原样打印第三列,那么您可以这样做:

awk '!(NR%2){print(($2==col2&&$4==col4)?$3-col3:col3 RS $3)}{col2=$2;col3=$3;col4=$4}' file
1.54465
0.323581
225124.933927
225124.934205
2.24858

关于linux - 如果同一行有 2 个字段匹配,则从同一列减去 2 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23718727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com