2
以下のawkプログラムで正しい結果が得られました。AWKレコードとフィールドの実行方法と読み込み方法
{
for(i = 1; i <= NF; i++)
{
if (min[i]==""){ print "initial min " $i; min[i]=$i;} #line1
if (max[i]==""){ print "initial max " $i; max[i]=$i;} #line2
if ($i<min[i]) { print "New min " $i; min[i]=$i;} #line3
if ($i>max[i]) { print "New max " $i; max[i]=$i;} #line4
}
}
END
{
OFS="\t";
print "min","max";
for(i = 1; i <= NF; i++)
{
print min[i],max[i];
}
}
データセットのフィールドは、1行目と2が印刷されているスペース
0.4 1.4 2.4 3.4
0.3 1.3 2.3 3.3
0.1 1.1 2.1 3.1
0.2 1.2 2.2 3.2
0.5 1.5 2.5 3.5
出力
initial min 0.4
initial max 0.4
initial min 1.4
initial max 1.4
initial min 2.4
initial max 2.4
initial min 3.4
initial max 3.4
New min 0.3
New min 1.3
New min 2.3
New min 3.3
New min 0.1
New min 1.1
New min 2.1
New min 3.1
New max 0.5
New max 1.5
New max 2.5
New max 3.5
min max
0.1 0.5
1.1 1.5
2.1 2.5
3.1 3.5
を用いて分離されています。しかし、私は、以下のプログラムのためのコードのAWKプロセスラインが行う方法を理解してはいけません代わりに(つまり、最初の最小値と最大値)しかし、3行目と4行目はすべてのフィールド(または列)のMin MinまたはMaxを設定した後に実行されます。
'{}'ブロックは、デフォルトではすべての行で実行されています。終了ブロックは、すべての行が処理されたときにのみ実行されます。 – 123
しかし、1行目と2行目を観察すると、レコードごとに交互に実行されます。各フィールドの最小値は、最初にすべてのフィールドのminを設定してから、すべてのフィールドにmaxを設定するのではなく、1つずつ設定されます。 –
これはまったく起こりません。すべての 'if'はすべての行のすべてのフィールドで実行されます。 – 123