使用 awk 根据列中的标识符减去连续行中的两个数字

使用 awk 根据列中的标识符减去连续行中的两个数字

我正在学习 bash,但我一直坚持从文本文件中提取数据。我知道我可以使用“awk”,但不知道如何......

我将以下数据组织为两列。

8.044   FIX
9.326   3 the
18.726  blank
20.742  FIX
63.624  FIX
64.89   3 house
73.656  TEST

我想根据第二列中的标识符减去第一列中显示的数字。第二列中的“3”是我的标识符,后续行是我要从中减去的数字。所以,它应该是这样的:

18.726 - 9.326
73.656 - 64.89

输出应位于包含三列的文本文件中,如下所示:

9.326 9.4 1
64.89 8.766 1

任何帮助将非常感激!提前致谢!

答案1

尝试 :

awk '$2=="3"{out=1;last=$1;next}out{print last,$1-last,1;out=0}' infile

答案2

如果反转文件的行,awk 代码会更容易一些:

tac file | awk '$2 == "3" {print $1, prev - $1, 1} {prev = $1}' | tac
9.326 9.4 1
64.89 8.766 1

如果“3”出现在该行的最后一行,则第二个值将是第一个值被求反:“prev”变量将为空,并且 awk 将在减法中使用值零。

相关内容