Ich bekomme das richtige Ergebnis für das awk-Programm unten. Aber ich verstehe nicht, wie funktioniert AWK Prozess Codezeilen für das folgende Programm:AWK, wie Datensätze und Felder ausgeführt werden und lesen
{
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];
}
}
Datasetfelder getrennt verwendet Raum
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
Ausgabe
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
Linie 1 und 2 gedruckt alternativ (also initial min und max) Aber Zeile 3 und Zeile 4 werden nach dem Setzen neuer Min oder Max für alle Felder (oder Spalten) ausgeführt. Wie funktioniert awk wirklich?
'{}' Blöcke ausgeführt. Der Endblock wird nur ausgeführt, wenn alle Zeilen bearbeitet wurden. – 123
Aber wenn Sie in der oberen Zeile beobachten, werden Zeile 1 und Zeile 2 alternativ für jeden Datensatz ausgeführt. min max für jedes Feld wird nacheinander eingestellt, anstatt zuerst min für alle Felder zu setzen und dann max für alle Felder zu setzen. –
Das passiert gar nicht, jedes 'if' läuft auf jedem Feld jeder Zeile. – 123