如果列中的值发生变化,则计算间隔

如果列中的值发生变化,则计算间隔

我不习惯编码,但为了我的工作,我必须对文本文件进行一些处理,并且我需要一些帮助来解决我遇到的问题。

我有一个包含两列的文件,其中包含一些数字:

180.000000   115.944480
180.000000    95.979157 
180.000000    93.583322 
178.593750   122.797168 
178.593750   120.000000 
178.593750   117.279613 
178.593750   102.024699 
178.593750    99.594068
   ...           ...

第二列中有多个值与第一列中的一个唯一值相关联。现在我想为第 1 列中的每个唯一值打印第 2 列中的值的间隔。

期望的输出:

115.944480 93.583322
122.797168 99.594068
...

显然,如果第 1 列中的值发生变化,我必须存储这些值,并且必须打印第 2 列的先前值和最近值。但这就是问题所在:如何在 bash 或 awk 中实现这一点?

答案1

Awk初始条件的解决方案“对于第 1 列中的每个唯一值,第 2 列中的值的间隔”(因为您的状况已经发生了很大变化):

awk 'NR > 1{ 
         if ($1 == num1) intvl += num2 - $2;
         else { print intvl; intvl = 0 }
    }
    { num1 = $1; num2 = $2 }
    END{ print intvl }' file

示例输出:

22.3612
23.2031

满足第2个条件“如果第 1 列中的值发生更改,则打印第 2 列的先前值和最近值”:

awk '!a[$1]++{ 
         if (first != "") { print first, last; first = last = "" }
         first = $2
     }
     { last = $2 }
     END{ print first, last }' file

输出:

115.944480 93.583322
122.797168 99.594068

相关内容