[linux-l] [Lösung-II] awk

Olaf Radicke briefkasten at olaf-radicke.de
Do Aug 4 08:18:53 CEST 2011




Peter Ross <Peter.Ross at bogen.in-berlin.de> hat am 4. August 2011 um 07:32
geschrieben:
> Aber ein Array als Parameter kann veraendert werden, nach meiner 
> Ubuntu-Manpage [gawk, nehme ich an):
>
>         Functions are passed expressions by  value  and  arrays  by
>         reference.  .. For example, csplit(s,A) puts each character of  s 
>into
>         array A and returns the length of s.
>
>              function csplit(s, A,    n, i)
>              {
>                n = length(s)
>                for( i = 1 ; i <= n ; i++ ) A[i] = substr(s, i, 1)
>                return n
>              }
> 
 
Also, ich hab das hier versucht und das geht:
 
<code>
BEGIN{
  Mensch["Perter", "Bauch"] = "leer"
  Mensch["Perter", "Typ"] = "Fleischesser"

  Mensch["Ulli", "Bauch"] = "Leer"
  Mensch["Perter", "Vegetarier"] = "Fleischesser"

  goToMcDonald("Peter")
  goToMcDonald("Ulli")

  stimmungsbild("Peter")
  stimmungsbild("Ulli")
}

function goToMcDonald(_name)
{
    if (Mensch[_name, "Typ"] == "Fleischesser" )
    {
        Mensch[_name, "Bauch"] = "voll"
    }else
    {
        Mensch[_name, "Bauch"] = "leer"
    }
}


function stimmungsbild(_name)
{
    if (Mensch[_name, "Bauch"] == "voll" )
    {
        print _name " ist statt und zufrieden!"
    }else
    {
        print _name " ist hungrig und stinksauer!"
    }
}
</code> 
 
Aber tatsächlich, das funktioniert auch: 
 
<code>
BEGIN{
    mittagspause()
}

function mittagspause(_peter)
{
  _peter["Bauch"] = "leer"
  _peter["Typ"] = "Fleischesser"

  _uli["Bauch"] = "leer"
  _uli["Typ"] = "Vegetarier"

  print "vorher: Peter, bauch " _peter["Bauch"]
  print "vorher: Uli, bauch " _uli["Bauch"]
  goToMcDonald(_peter)
  goToMcDonald(_uli)
  print "nachher: Peter, bauch " _peter["Bauch"]
  print "nachher: Uli, bauch " _uli["Bauch"]
}

function goToMcDonald(_mensch)
{
    if (_mensch["Typ"] == "Fleischesser" )
    {
        _mensch["Bauch"] = "voll"
    }else
    {
        _mensch["Bauch"] = "leer"
    }
}
</code>
 
Super, wieder ein Riesen  Schritt weiter...
 
Gruß
 
Olaf 



Mehr Informationen über die Mailingliste linux-l