我不习惯编码,但为了我的工作,我必须对文本文件进行一些处理,并且我需要一些帮助来解决我遇到的问题。
我有一个包含两列的文件,其中包含一些数字:
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