将一系列变量和条件列的多行添加到文件中

将一系列变量和条件列的多行添加到文件中

我有一个包含 4 列的文件。前两列用于 x 和 y 位置(以整数形式),第三、第四列用于任意字段值。

1 1 0.5 1.2 
1 2 1.7 2.3
1 3 2.0 2.2 
2 1 1.4 2.5
2 2 1.6 3.0
2 3 2.35 2.9
3 1 2.0 2.9
3 2 0.7 2.5
3 3 0.2 2.1

对于此输入文件,我想在第二列和第三列之间添加两列对于前两列中的每个 x,y 值,应将 1 到 3 之间的 z 值添加为第三列。最后,第四列应添加一个值,使得

if (z<$3 ) value = 0
if (z>=$3 && z <=$4) value = 1
if (z >$4) value = 2

请注意,$3 和 $4 是输入文件中的列值,并且 $4 始终大于 $3。

输出文件应该类似于

1 1 1 1 0.5 1.2 
1 1 2 2 0.5 1.2 
1 1 3 2 0.5 1.2 
1 2 1 0 1.7 2.3
1 2 2 1 1.7 2.3
1 2 3 2 1.7 2.3    
1 3 1 0 2.0 2.2 
1 3 2 1 2.0 2.2
1 3 3 2 2.0 2.2
2 1 1 2 1.4 2.5
2 1 2 2 1.4 2.5
2 1 3 2 1.4 2.5
2 2 1 0 1.6 3.0
2 2 2 1 1.6 3.0
2 2 3 1 1.6 3.0
2 3 1 0 2.35 2.9
2 3 2 0 2.35 2.9
2 3 3 2 2.35 2.9
3 1 1 0 2.0 2.9
3 1 2 1 2.0 2.9
3 1 3 2 2.0 2.9
3 2 1 1 0.7 2.5
3 2 2 1 0.7 2.5
3 2 3 2 0.7 2.5
3 3 1 1 0.2 2.1
3 3 2 1 0.2 2.1
3 3 3 2 0.2 2.1

如何用 awk 创建这样的输出文件?

答案1

您似乎要求的是:

awk '{                 
  y = $2; 
  for(z=1;z<=3;z++){
     value = z < $3 ? 0 : z > $4 ? 2 : 1; 
    $2 = y OFS z OFS value; 
    print
  }
}' file

但是我无法让它产生所示的输出。

相关内容