Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在';awk';?_Arrays_Awk_Interpolation - Fatal编程技术网

Arrays 如何在';awk';?

Arrays 如何在';awk';?,arrays,awk,interpolation,Arrays,Awk,Interpolation,我们希望使用“awk”在数组中插入数据。我有一个数组 1 1 3 3 ... 3 3 5 3 5 5 6 5 6 6 6 5 我们希望获得 1 1 3 3 ... 2 2 4 4 3 3 5 3 4 4 5.5 4 5 5 6 5 6 6 6 5 这样做将允许我们拥有一个完整的数组,包含第一列的所有可能数据,表示时间线。第2列和更多列是数据。矩阵的大小为4x110100。我们有以下脚本: awk ' { P[$1]=$2 I[i++]=$1 } END{ j=0; s=I[j]

我们希望使用“awk”在数组中插入数据。我有一个数组

1 1 3 3 ...
3 3 5 3
5 5 6 5
6 6 6 5
我们希望获得

1 1 3 3 ...
2 2 4 4
3 3 5 3
4 4 5.5 4
5 5 6 5
6 6 6 5
这样做将允许我们拥有一个完整的数组,包含第一列的所有可能数据,表示时间线。第2列和更多列是数据。矩阵的大小为4x110100。我们有以下脚本:

awk '
{
  P[$1]=$2
  I[i++]=$1
} 
END{
  j=0; s=I[j]; t=I[j+1]
  for(i=m;i<=n;i++){
    if(I[j+2] && i>t){
    j++; s=I[j]; t=I[j+1]
    }                        
  print i,P[s]+(i-s)*(P[t]-P[s])/(t-s)
  }                                     
}' m=1 n=6 f1.dat > f2.dat

我们如何将插值扩展到整个阵列?!我尝试过“for”或“while”脚本,但我们无法实现目标

您可以通过只跟踪当前行和以前的行来实现这一点:

BEGIN {
    # initialise "previous" line
    getline;
    for (i=0; i<=NF; i++) p[i] = $i;
}
{
    # print previous line
    print p[0];

    # check if column 1 has skipped
    if ( (d = $1-p[1]) > 1 ) {

        # if so, insert (d-1) new rows
        for (i=1; i<d; i++) {

            # interpolate values for each column
            for (c=1; c<=NF; c++) {
                printf "%s%s",
                    p[c] + (i/d)*($c-p[c]), # linear interpolation
                    c==NF ? ORS : OFS;      # avoid trailing spaces
            }
        }
    }

    # update previous line
    for (i=0; i<=NF; i++) p[i] = $i;
}
END {
    # print the final line
    print p[0];
}
开始{
#初始化“上一行”
getline;
对于(i=0;i 1){
#如果是,请插入(d-1)新行

对于(i=1;iWhy是第二个输出记录
244
,而不是
243
?输出…您是正确的!
BEGIN {
    # initialise "previous" line
    getline;
    for (i=0; i<=NF; i++) p[i] = $i;
}
{
    # print previous line
    print p[0];

    # check if column 1 has skipped
    if ( (d = $1-p[1]) > 1 ) {

        # if so, insert (d-1) new rows
        for (i=1; i<d; i++) {

            # interpolate values for each column
            for (c=1; c<=NF; c++) {
                printf "%s%s",
                    p[c] + (i/d)*($c-p[c]), # linear interpolation
                    c==NF ? ORS : OFS;      # avoid trailing spaces
            }
        }
    }

    # update previous line
    for (i=0; i<=NF; i++) p[i] = $i;
}
END {
    # print the final line
    print p[0];
}