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脚本。请参阅,感谢您提供的解决方案。非常有效。感谢您提供的解决方案。非常有效。