Lies die Wete ein, also for(i=1;i<=FN;i++) x[i]=0+$FN und
dann in jeder 2ten Zeile, oder lies die nächste Zeile mit getline ein,
und gib es kombiniert aus.
Liam Z. schrieb:> for(i=1;i<=FN;i++) x[i]=0+$FN
Das verstehe ich grad leider überhaupt nicht. Die for() Schleife läuft
alle Zeilen ab und packt mir jede Zeile in das Array x, oder?
Aber ich brauchs ja nicht Zeilenweise sondern Wert für Wert...
getline ist generell eine super Idee, aber auch hier springe ich ja nur
zur nächsten Zeile. Ich brauch ja immer den jeweiligen Wert aus der 2.
Zeile und muss dann wieder zurückspringen.
Es sollte dir aufzeigen wie es geht, keine fertige Losung, dachte du
kennst dich etwas aus.
Hier ein funktionierender code.
BEGIN { FS = ","; OFS=","; }
{
for(i=1;i<=NF;i++) x[i]=$i;
getline; $0=$0; gsub("[ \t]*0x","");
for(i=1;i<=NF;i++) $i=x[i] $i
print $0;
}
Läuft!! :)
Danke danke danke danke!!
Liam Z. schrieb:> dachte du> kennst dich etwas aus.
... das dachte ich auch ... fehlt wohl noch so einiges an Übung.
Wenn man die Sache etwas systematischer angeht, stellt man fest, dass
deine Records aus 20 Feldern bestehen, die jeweils durch eine Leerzeile
getrennt werden. Mit RS="" kannst du awk das entsprechend verklickern.
Der nächste Schritt wäre dann, die Werte in den Feldern 1 und 11 zu
addieren, dann von Feld 2 und Feld 12, etc. Dabei ist zu beachten, dass
die Feldern 1..10 quasi die Tausender- und Hunderterstelle
Sorry, mein Browser hat rumgesponnen und den Beitrag vorzeitig
abgeschickt... :-(
Wenn man die Sache etwas systematischer angeht, stellt man fest, dass
deine Records aus 20 Feldern bestehen, die jeweils durch eine Leerzeile
getrennt werden. Mit RS="" kannst du awk das entsprechend verklickern.
Der nächste Schritt wäre dann, die Werte in den Feldern 1 und 11 zu
addieren, dann von Feld 2 und Feld 12, etc. Dabei ist zu beachten, dass
die Felder 1..10 quasi die Tausender- und Hunderterstelle des
Ergebnisses enthalten und dementsprechend mit 0x100 multipliziert werden
müssen.
Das passende awk-Programm würde dann also ungefähr so aussehen:
Dein awk liest Hexzahlen ein?
Ich würde da einfach bei nacktem Text bleiben:
1
BEGIN {
2
RS = ""
3
FS = ",[ \t\n\r]*"
4
}
5
6
{
7
words = (NF-1)/2
8
for (i = 1; i <= words; ++i)
9
printf("%s%s, ", $i, substr($(i + words), 3, 2))
10
print ""
11
}
Die Variable words erhält dynamisch die Zahl der auszugebenden
16bit-Worte, die Korrektur "-1" ist erforderlich, da ein leeres Feld am
Ende des Records erkannt wird (OK, an sich wird das durch implizites
truncating schon erledigt, aber ich bevorzuge es, so etwas explizit zu
coden, man will das ja auch in 20 Jahren noch leicht modifizieren
können).