linux-l: awk Frage

Lutz Pflughaupt lutz-pflughaupt at tiscalinet.de
Mi Feb 14 22:05:04 CET 2001


"Dr.Bernd Freistedt" wrote:
> 
> ---Lutz Pflughaupt (linux-l at mlists.in-berlin.de) wrote on Wed, 14 Feb 2001 17:41:20 +0100
> > Hallo liebe Linux User,
> > bin mal wieder am Grübeln, wie ich folgendes mit einer awk Zeile
> > bewerkstelligen kann.
> > In einer Zeile wie dieser:
> >
> > awk '$3~/^02/||$3~/^04/||$3~/^05/ {printf(%2s%4s%-8s\n ,$8,$9,$10,$11)}'
> > <tmp1 > tmp2
> >
> > möchte ich erreichen daß die jeweils zutreffende Zeile nach Umleitung in
> > tmp2 anschließend aus tmp1 entfernt wird.
> > vielen Dank Lutz.
> 
> was Du mit der awk-Zeile moechtest, ist mir nicht ganz klar. Auf
> jeden Phall wird's einen Parse Error geben - oder mir ist die
> Struktur der Datei nicht klar.
> 
> Sei es wie es sei.
> 
> Ansatz:
> MZEILE=`und hier kommt Deine awk-Zeile (ohne Umleitung)`
> (e)grep -v $MZEILE tmp1 > $$ ; mv $$ tmp1
> 
> Damit ist dann die inkriminierte Zeile aus tmp1 entfernt (wenn
> ich das Problem richtig verstanden habe).
> Wegen grep/egrep: da ich nicht weiss, wie regexp-kritisch die
> Zeile ist, muesstest Du ggf. $MZEILE noch regexpr-like
> aufarbeiten, z. B. mit sed, dann nimm egrep, sonst bei einfachem
> ASCII-Inhalt reicht grep.
> 
> Gruessli
> Bernd

sorry, daß ich da wohl etwas zu wenig ausgeholt habe. Folgende
Situation:
in der Datei tmp sind Daten, die bereits in feste Spalten aufgeteilt
sind, insgesamt 11 Spalten mit fester Breite. Meine awk Zeile sorgt
dafür, daß in der tmp1 alle Zeilen erscheinen, für die die Bedingung
git. Das printf sorgt dafür, daß das gewünschte Ausgabeformat entsteht
und im $11 die "1111" als Kennzeichnung entsteht.

awk '$3~/^016/||$3~/^018/||$3~/^019/
{printf("%-2s%-4s%-16s%-4s%-4s%-2s%-2s%-24s%-8s%-8s%-5s
\n",$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,"1111")}' tmp > tmp1   

Jetzt sollen die Zeilen, die zuvor die Bedingung erfüllt hatten aus tmp
entfernt werden.

im nächsten Schritt wollte ich einen weiteren awk
'$3~/^007/.........,"2222")}' tmp > tmp2
machen.
u.s.w. 
Am Ende, wenn alles "gefunden" wurde sollte dann tmp leer sein.



Mehr Informationen über die Mailingliste linux-l