一連の変数と基準列で構成される複数行をファイルに追加します。

一連の変数と基準列で構成される複数行をファイルに追加します。

4つの列を持つファイルがあります。最初の2つの列はxとyの位置(整数)のもので、3番目と4番目の列はランダムフィールドの値です。

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

この入力ファイルでは、2番目と3番目の列の間に2つの列を追加したいと思います。最初の2列の各x、y値に対して、1から3の間のz値を3番目の列として追加する必要があります。最後に、4番目の列には次の値を追加する必要があります。

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

ただし、表示された出力を生成することはできません。

おすすめ記事