Aktuelles Alter anhand Geburtsdatum ausgeben.

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Karlhans, 30.05.2007.

  1. #1 Karlhans, 30.05.2007
    Zuletzt bearbeitet: 30.05.2007
    Karlhans

    Karlhans Jungspund

    Dabei seit:
    22.04.2007
    Beiträge:
    16
    Zustimmungen:
    0
    Hallo,

    ich habe eine Bash 3.1.17 auf einem Linux 2.6.20 mit den GNU Tools.

    Ich habe eine Namensliste die ist so aufgebaut:

    Code:
    Hanswurst 20 06 1955
    Karlheinz 01 10 1980
    Franzmueller 31 12 1975
    Helmuthelm 15 02 1985
    
    Das erste Wort ist der Name, das zweite der Geburtstag, dritte der Geburtsmonat und das Vierte das Geburtsjahr. Also "Name TT MM JJ". Ich moechte nun eine Ausgabe erzeugen wie:

    Code:
    Hanswurst 51
    Karlheinz 26
    .
    .
    
    Also Name und aktuelles Alter in Jahren.

    Ich denke seit drei Stunden ueber das Problem nach, mir will aber nichts wirkliches einfallen.
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    Hat sich vermutlich erledigt, ich kann mir ja mit "date" das aktuelle datum holen und dann etwas mit "bc" rechnen und mit einer "if" Schleife eine Fallunterscheidung durchfuehren ob der Geburtstag dieses Jahr schon war oder noch ansteht.

    Vielen Dank fuers Lesen, ich musste einfach mal das Problem sauber aufschreiben und durchlesen. :))
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 dosenfleisch, 30.05.2007
    dosenfleisch

    dosenfleisch Foren As

    Dabei seit:
    29.03.2007
    Beiträge:
    75
    Zustimmungen:
    0
    bitte
    ;)
     
  4. #3 smg, 30.05.2007
    Zuletzt bearbeitet: 30.05.2007
    smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    Code:
    #!/bin/bash
    
    #!/bin/bash
    
    # aufgabe 1, nur ausgeben vom Alter
    while read line; do
        set -- $line
        echo $1 $(( $(date "+%Y") - $4 ))
        done < foo
    
    # Anzeigen ob schon bday gefeiert oder nicht oder heute
    while read line; do
        set -- $line;
        tag=$(date "+%d")
        monat=$(date "+%m")
        if [[ $2 < $tag && $3 < $monat ]]; then
            echo "$1 hatte schon am $2 $3 Geburstag"
        elif [[ $tag = $2 && $monat = $3 ]]; then
            echo "$1 hat _heute_ Geburtstag"
        else
            echo "$1 hat noch dieses Jahr Geburstag ($2 $3)"
        fi
        done < foo
    
    BC ist unnötig geht mit SH/Bash. See my code. :)

    Zeit zum Schreiben: 1min 53s, also nicht wundern wenns nicht schön aussieht, aber es geht zumindest:

    stephan@unimatrix ~ $ ./date.sh
    Hanswurst 52
    Karlheinz 27
    Franzmueller 32
    Helmuthelm 22
    Hanswurst hat noch dieses Jahr Geburstag (20 06)
    Karlheinz hat noch dieses Jahr Geburstag (01 10)
    Franzmueller hat noch dieses Jahr Geburstag (31 12)
    Helmuthelm hatte schon am 15 02 Geburstag
     
  5. b00

    b00 Haudegen

    Dabei seit:
    28.03.2007
    Beiträge:
    597
    Zustimmungen:
    0
    Ort:
    /root
    .oO( scheiss schaltjahre :devzung: )
     
  6. #5 smg, 30.05.2007
    Zuletzt bearbeitet: 30.05.2007
    smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    yo pech, dann hat derjenige halt nur alle 4 jahre bday PECH :D, keine lust/zeit dass jetzt adäquat zu formulieren, könnt ihr ja machen!
     
  7. #6 Karlhans, 30.05.2007
    Karlhans

    Karlhans Jungspund

    Dabei seit:
    22.04.2007
    Beiträge:
    16
    Zustimmungen:
    0
    smg: Da ist nur ein Fehler, Karlheinz ist 26 Jahre alt :devil:

    Code:
    #!/bin/sh
    
    IFS="
    "
    
    for i in `cat daten` ; do 
    
    name=(`echo $i | awk '{print $1}'`)
    gtag=(`echo $i | awk '{print $2}'`)
    gmonat=(`echo $i | awk '{print $3}'`)
    gjahr=(`echo $i | awk '{print $4}'`)
    
    atag=(`date '+%d'`)
    amonat=(`date '+%m'`)
    ajahr=(`date '+%Y'`)
    
    djahr=(`echo "$ajahr - $gjahr" | bc`)
    
    
    if [ "$gmonat" -lt "$amonat" ] ; 
    	then echo "$name $djahr" ; 
    	else 	if [ "$gmonat" -eq "$amonat" -a "$gtag" -le "$atag" ] ;
    			then echo $name $djahr ;
    			else echo $name `echo $djahr - 1 | bc` ;
    		fi ;
    fi 
    done
    
    
    Meins sieht aber auch nicht besser aus, funktioniert aber richtig :D
     
  8. #7 smg, 30.05.2007
    Zuletzt bearbeitet: 30.05.2007
    smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    Ja wie gesagt, bc ist unnötig und deine cat Befehle auch. Wieso nimmst du keine Shell Arithmetik? Awk brauchst du auch garnicht. Durch dieses ganze Zeug wird das ziemlich lahm. Ich verbessere mein Script nacher noch.
     
  9. #8 Karlhans, 30.05.2007
    Karlhans

    Karlhans Jungspund

    Dabei seit:
    22.04.2007
    Beiträge:
    16
    Zustimmungen:
    0
    Brauchst es fuer mich nicht zu verbessern. Ansonsten schaue ich es mir gerne an, ich bin noch in der "Anfangslernphase" was bash betrifft. :)

    Ich verwende bc weil ich es sonst auch nutze um umfangreiche Messreihen auszuwerten, daher kenne ich mich damit einigermassen aus.
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. #9 posiputt, 30.05.2007
    posiputt

    posiputt zwar!

    Dabei seit:
    10.12.2004
    Beiträge:
    321
    Zustimmungen:
    0
    Ort:
    hamburg
    :)
     
  12. #10 Karlhans, 31.05.2007
    Karlhans

    Karlhans Jungspund

    Dabei seit:
    22.04.2007
    Beiträge:
    16
    Zustimmungen:
    0
    Nicht zu Vergessen, die "for" Anweisung.
     
Thema:

Aktuelles Alter anhand Geburtsdatum ausgeben.

Die Seite wird geladen...

Aktuelles Alter anhand Geburtsdatum ausgeben. - Ähnliche Themen

  1. OpenSuse bietet aktuelles KDE mit LEAP oder Tumbleweed

    OpenSuse bietet aktuelles KDE mit LEAP oder Tumbleweed: OpenSuse bietet zwei neue Images an, die die neuesten KDE-Pakete aus den Git-Repositories enthalten. Die Images basieren auf den Varianten Leap...
  2. Aktuelles Notebook von System76 mit Ubuntu 13.10

    Aktuelles Notebook von System76 mit Ubuntu 13.10: Das neue Notebook des Computerausrüsters System76 vereint Ubuntu 13.10 mit aktueller Hardware wie einem berührungssensitiven Display. Weiterlesen...
  3. aktuelles Datum -2 tage ??????????

    aktuelles Datum -2 tage ??????????: hi ich habe ein kleines problem ich bräuchte mal eine kleine syntax um das aktuelle datum (-2 tage) zu benutzen! datum_2days=???? danke schön
  4. Aktuelles CUPS-Releas funktioniert nicht unter FreeBSD?

    Aktuelles CUPS-Releas funktioniert nicht unter FreeBSD?: Ich hab folgendes problem, wenn ich den drucker über webgui eingerichtet habe und dann eine test seite drucken will bekomme ich folgenden fehler:...
  5. die 5 aktuellesten Datein im Verzeihnis suchen

    die 5 aktuellesten Datein im Verzeihnis suchen: wer kann mir nun weiterhelfen??? ###### Hallo , i need help. folgendes Problem: brauche ein Script das mir die aktuellesten 5...