awk skript: Probleme mit if und else Anweisungen

H

h.nietnagel

Grünschnabel
Hallo,

ich verzweifle an einem für mich schon sehr fortgeschrittenen Programm. Ich hab komplexe Textdateien (log Dateien), den ich bestimmte Information entnehmen will.
Ich poste der Einfachheit halber mal einen Ausschnitt:

Code:
XXX	2	Picture	a_mask	613612	160696	204	
XXX	2	Response	1	628734	175777	2           
XXX	2	Port Input	12	628734	175777	2           
XXX	2	Picture	b_norm	633758	180801	2	
XXX	2	Response	2	643824	190867	3           
XXX	2	Port Input	15	643824	190867	3           
XXX	2	Response	3	648905	195948	2           
XXX	2	Port Input	16	648905	195948	2           
XXX	2	Response	1	616735	197778	1           
XXX	2	Port Input	12	616735	197778	1           
XXX	2	Picture	c_mask	612829	200872	1	
XXX	2	Response	1	666174	213217	2           
XXX	2	Port Input	12	666174	213217	2           
XXX	2	Response	2	672729	219772	9           
XXX	2	Port Input	15	672729	219772	9           
XXX	2	Picture	d_mask	673899	220942	2	
XXX	2	Response	2	687105	234148	2           
XXX	2	Port Input	15	687105	234148	2           
XXX	2	Picture	e_norm	693970	241013	1	
XXX	2	Response	2	694735	241778	1           
XXX	2	Port Input	15	694735	241778	1           
XXX	2	Response	1	708575	255618	2           
XXX	2	Port Input	12	708575	255618	2           
XXX	2	Picture	f_mask	714040	261083	2
XXX	2	Response	1	716726	263769	17
XXX	2	Port Input	53	716726	263769	17

Das Beispiel enthält alle Kombinationen, die ich in einem .awk file abfrage. Aber irgendwie stimmt was mit den if und else Anweisungen nicht.

Code:
BEGIN{
FS="\t";f=0;h=0;
}
{
if($3=="Picture"){f=1;x=$4;y=$5;
	if(f==1&&$3=="Response"&&$4==1){a=0;b=0;c=0;d=0;h++}
	else {
	if(f==1&&$3=="Response"&&$4!~1&&h<=1){a=$4;b=$5;c=0;d=0; h++}
	else {
	if (f==1&&$3=="Response"&&$4!~1&&h>=2){c=$4;d=$5; h++}
	print x,y,a,b,c,d;f=0;h=0}
	}
	}
}
END{

}
Der Output soll so aussehen:
Code:
a_mask	613612	0 	0	0	0
b_norm	633758	2	643824	3	648905
c_mask	612829 	2	672729	0	0
d_mask	673899	2	687105	0	0
e_norm	693970	2	694735	0	0
f_mask	714040	0	0	0	0


Ich hab es mit der Schreibweise im Skript oben geschafft, wenigstens alle "Pictures" im Output zu haben, aber die anderen Bedingungen werden ignoriert. Hat jemand Ideen zur Problemlösung?

Vielen Dank im Voraus!

Schöne Grüße,
Hannes
 
F

floyd62

Routinier
Der Hauptteil deines Codes läuft ja komplett innerhalb der Bedingung
Code:
if($3=="Picture") {
...
}
Damit ist die Bedingung
Code:
if (...$3=="Response"...) {
nicht mehr zu erfüllen, und der ganze Rest wird natürlich ignoriert ...

Gruss, A.
 

Ähnliche Themen

E/A-Fehler (.snapshots is not a btrfs subvolume).

Verschlüsseltes Backup-Script mit rsync

ip6tables Problem

Mit AWK verschiedene Felder verschiedener Zeilen vergleichen

Keine grafische Oberfläche (Debian Installation)

Oben