均衡块

equalizing block of nos

我有一个包含实验时间的文本文件

>
0.000
0.010
0.020
0.030
0.040
0.050
>
0.000
0.010
0.020
0.030
>
0.000
0.010
0.020
0.030
0.040
0.050

我想通过找出整个输入数据的最大值来均衡每个块,然后根据数据的增量(从输入自动计算)单个块应该均衡到输入数据中存在的最大值预期输出是

>
0.000
0.010
0.020
0.030
0.040
0.050
>
0.000
0.010
0.020
0.030
0.040
0.050
>
0.000
0.010
0.020
0.030
0.040
0.050

我尝试了下面给出的代码,但它通过重复下面给出的第二个块的最后一行给出结果,这与预期输出不同

>
0.000
0.010
0.020
0.030
0.040
0.050
>
0.000
0.010
0.020
0.030
0.030
0.030
>
0.000
0.010
0.020
0.030
0.040
0.050

我的脚本

awk '[=13=]==">" {
   if (c && c>max)
      max = c
   ++n
   c = 0
   next
}
{
   r[n][++c] = [=13=]
}
END {
   for (i=1; i<=n; ++i) {
      print ">"
      for (j=1; j<=(max>c?max:c); ++j){
         print (r[i][j] == "" ? prev : r[i][j])
         prev=r[i][j]==""?prev:r[i][j]
      }
   }
}' input

这段代码通过重复第二个块的最后一行值来给出输出,因为我正在做一些事情mistake.I希望专家可以帮助提前克服这个问题problem.Thanks。

如果这不是您所需要的:

$ cat tst.awk
NR==FNR {
    if ( !/>/ && ((max == "") || ( > max)) ) {
        max = 
    }
    if ( (prev == prev+0) && ( == +0) ) {
        step =  - prev
    }
    prev = 
    next
}
/>/ {
    if ( FNR > 1 ) {
        prt()
    }
}
{
    print
    prev = 
}
END { prt() }

function prt(   i) {
    for ( i=prev+step; i<=max; i+=step ) {
        printf "%.03f\n", i
    }
}

$ awk -f tst.awk file file
>
0.000
0.010
0.020
0.030
0.040
0.050
>
0.000
0.010
0.020
0.030
0.040
0.050
>
0.000
0.010
0.020
0.030
0.040
0.050

然后编辑您的问题以阐明您的要求并提供更具代表性的样本input/output,包括上述情况不适用的情况。

Assumptions/Understandings:

  • 所有块都以相同的值开始(例如,0.000
  • 所有值都递增相同的量(例如,0.010
  • 所有块都将展开以包含所有值
  • net objective是将同一个块显示N次(其中N是块数)

一个 awk 想法需要一次输入文件:

awk '
/^>/          { blkcnt++; next }
!( in seen) { seen[]; arr[++n]= }
END           { for (i=1;i<=blkcnt;i++) {
                    print ">"
                    for (j=1;j<=n;j++)
                        print arr[j]
                }
              }
' input

这会生成:

>
0.000
0.010
0.020
0.030
0.040
0.050
>
0.000
0.010
0.020
0.030
0.040
0.050
>
0.000
0.010
0.020
0.030
0.040
0.050

注意:

  • 我猜 OP 的真实输入文件还有更多内容(例如,每一行都包含时间值后面的附加文本数据),在这种情况下,此解决方案将无法满足
  • 如果是这种情况,则 OP 应该使用更具代表性的样本数据集更新问题