Awk 合并数据以生成单个曲线

Awk 合并数据以生成单个曲线,awk,sed,offset,data-analysis,Awk,Sed,Offset,Data Analysis,我想合并数据,使其看起来像 1 0.832936 2 0.890475 3 0.816155 3 1.21183 4 1.21881 5 1.28013 6 1.28479 7 1.32075 8 1.39582 8 1.2462 9 1.24566 10 1.24029 11 1.30685 12 1.31264 13 1.38061 在这里,我使用了$1=3时的偏移量0.3956,并将其减至$1=8。类似地,从$1=8推断出0.2460,并将其外推至$1=13 我一直在使用bash脚本,使

我想合并数据,使其看起来像

1 0.832936
2 0.890475
3 0.816155
3 1.21183
4 1.21881
5 1.28013
6 1.28479
7 1.32075
8 1.39582
8 1.2462
9 1.24566
10 1.24029
11 1.30685
12 1.31264
13 1.38061
在这里,我使用了$1=3时的偏移量0.3956,并将其减至$1=8。类似地,从$1=8推断出0.2460,并将其外推至$1=13

我一直在使用bash脚本,使用awk和sed操作这些数据点,以获得所需的输出,但迄今为止没有任何成功。由于我是新手,我需要一段时间才能了解这一点

当前脚本如下所示:

1   0.832936
2   0.890475
3   0.816155
3   0.816155
4   0.823135
5   0.884455
6   0.889115
7   0.925075
8   1.000145
8   1.000145
9   0.999605
10  0.994235
11  1.060795
12  1.066585
13  1.134555
{1,5}中i的

做
回音“为C_u$i历史”
awk-vi=$i'{
如果(NR==i+2)p=0;p=2美元;
若(NR==i+3)n=0 ; n=$2 ;;
如果(NR>=i+3&&NR可能更通用

for i in {1,5}
do
echo "For C_$i hist" 

awk -v i=$i '{   
    if(NR == i+2) p=0;p = $2;
    if(NR == i+3) n=0;n = $2;
    if(NR >= i+3 && NR <= i+8)
    print $1 " " ($2 - (n-p));
    }' Input >> Output
done
也许更一般

for i in {1,5}
do
echo "For C_$i hist" 

awk -v i=$i '{   
    if(NR == i+2) p=0;p = $2;
    if(NR == i+3) n=0;n = $2;
    if(NR >= i+3 && NR <= i+8)
    print $1 " " ($2 - (n-p));
    }' Input >> Output
done

摆脱shell循环,只需使用awk脚本。请参阅摆脱shell循环,只需使用awk脚本。请参阅,感谢您提供的解决方案。非常有效。感谢您提供的解决方案。非常有效。