[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] awk-Akrobatik



Hallo Elmar,

Elmar W. Tischhauser, 22.09.2004 (d.m.y):

> On 22 Sep 2004 at 14:01 +0200, Christian Schmidt wrote:
> 
> > Beissen sich die Variablendeklarationen mit den "intern" von awk
> > verwendeten?
> 
> Ja. Wenn man Shellvariablen an AWK übergeben will, muss man entweder mit
> Quotingakrobatik arbeiten oder (komfortabler) awk die Variablen per
> '-v'-Parameter übergeben, der für diesen Zweck vorgesehen ist.

Ahja.

> Für deine konkrete Problemstellung würde ich etwas à la
> #!/bin/sh
> ALIASFILE="aliases.ls"
> awk -F": " -v USERNAME="${1}" \
> '$2 ~ USERNAME { print $2 ", \"| vacation -A " $1 " " $2 "\"" }' $ALIASFILE
> 
> probieren. Das '~' bewirkt ein Regex-Matching, d.h. du kannst bei Bedarf
> den Skriptparameter leer lassen und somit eine Gesamtübersicht bekommen
> oder mit einem beliebige regulären Ausdruck arbeiten. Wenn natürlich
> einige Benutzernamen als Teilstring von anderen vorkommen können, wäre
> '==' besser.

..also in der zweiten Zeile des o.a. awk-Aufrufs $2==USERNAME anstelle von 
$2 ~ USERNAME?
Es waere schon wichtig, dass awk bei Angabe von "schmidt" nicht auch
"schmidtc" hervorpult...

[einige Minuten spaeter]
...was in der Variante mit den beiden Gleichheitszeichen auch erreicht
wird:
 $ ./test2.sh schmidtc
 schmidtc, "| vacation -A Christian.Schmidt schmidtc"
Dagegen:
 $ ./test2.sh schmidt
 $

Vielen Dank, Elmar. Das ist so auf den ersten Blick genau das, was ich
gesucht habe!

> Übrigens: Wenn das Leerzeichen nach dem ':' nicht garantiert ist,
> arbeitest du besser mit ":" an Stelle von ": " als Feldtrenner und
> trimmst wenn nötig das Leerzeichen in $2 mit gsub o.ä. weg.

Ich muss noch einmal nachsehen, meine aber, dass das Leerzeichen
garantiert ist. Die aliases.ls wird auf von einem anderen Skript generiert...

Gruss,
Christian
-- 
Angenehm sind die erledigten Arbeiten.
		-- Marcus Tullius Cicero (106-43 v.Chr.)

Attachment: signature.asc
Description: Digital signature


Reply to: