【发布时间】:2014-05-18 05:04:13
【问题描述】:
我有一个这样格式化的文件:
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) 用第一个找到的值减去第 2 列上的第二个找到的值第 1 列,应该是这样的:
1) 找到的第一行:
1 223614 225119.537745 Engine45
1) 找到的第 2 行:
2 223614 225121.082392 Engine45
输出应该是这个的答案:
225121.082392 - 225119.537745 = 1.544647
下一个输出应该是:
第 3 行按 1):
3 223614 225124.440309 Engine45
4th line find by 1):
4 223614 225124.763890 Engine45
输出:225124.763890 - 225124.440309 = 0.323581
并依次提供文件中的所有记录。
我相信 1) 我可以让它工作,但 2) 对我来说真的越来越难了,但如果有人可以指导如何获得可能会非常有用,如果有帮助,我知道 shell 和 awk 的基础知识,但我我愿意在 perl 等其他工具上完成工作。
问候
【问题讨论】:
-
你希望输出在哪个地方?
-
1) 验证第 2 列和第 4 列是否在同一行中相等 但是只有三列可用。
-
如果值不一样怎么办?例如。第 5 行末尾有
6。 -
你应该提供你的预期输出来澄清。
-
输出可以打印在屏幕上,列用空格分隔,并且在提供的文件中,每行总是相等的,但是这个相等的行可能就在下一个或可能在最后一行,因此脚本应在文件中搜索第 2 列和第 4 列相等的第一个匹配项并进行逻辑。