Re: AWK - Spalten über Namen statt über Position ansprechen
Martin Klaiber <martinkl@zedat.fu-berlin.de> wrote:
> Andre Tann <atann@alphasrv.net> wrote:
>> Name Aktiv Nummer
>> Alice y 1
>> Bob n 2
>> awk '$Aktiv == "y" {print $Nummer}'
>> Sprich: gib mir die Nummer aller aktiven User.
> Das kann, denke ich, so gar nicht funktionieren, weil "Nummer" meines
> Erachtens für awk kein Feldbezeichner, sondern nur der Inhalt eines
> Feldes ist.
Man könnte es m.E. auch noch erweitern: Für awk ist die obenstehenden
Tabelle gar keine Tabelle, sondern einfach drei Zeilen, die in jeweils
drei Felder zerlegt werden. Die Verknüpfung von "Nummer" mit 1 oder 2
kann also nur über die Position erfolgen, denn das ist für awk das
einzige, was die drei Zeilen gemeinsam haben.
> Grundsätzlich würde es so also funktionieren, Du müsstest nur noch
> die Zeile mit den "Feldbezeichnern" und den Rest der Datei separat
> behandeln.
Eigentlich müsste es auch so funktionieren, wenn man Deine Bedingung
ergänzt, vorausgesetzt, die Zeile mit Deinen "Feldbezeichnern" steht
immer an erster Stelle in der Datei:
martinkl@mort:~$ cat bsp1
Name Aktiv Nummer
a y 1
b n 2
martinkl@mort:~$ cat bsp2
Name Nummer Aktiv
a 1 y
b 2 n
martinkl@mort:~$ cat bsp1 | awk '{for (i=1;i<=NF;i++) if ($i=="Nummer") Nummer=i ; else if ($i=="Aktiv") Aktiv=i; if ($Aktiv=="y") print $Nummer}'
1
martinkl@mort:~$ cat bsp2 | awk '{for (i=1;i<=NF;i++) if ($i=="Nummer") Nummer=i ; else if ($i=="Aktiv") Aktiv=i; if ($Aktiv=="y") print $Nummer}'
1
Ein awk-Experte kann das sicher noch schöner formulieren, bin selbst
nur awk-Gelegenheitsnutzer.
Gruß, Martin
Reply to: