Springe zum Hauptinhalt

Bourne
next up previous contents
Next: Primitive Turbo-C-Variante Up: Beispiele für Shell-Programmierung Previous: Selektives Kopieren

Varianten des Sieb-Filters

  • Schreiben Sie einen Filter namens sieb, der nur jede zweite Zeile von stdin -> stdout kopiert.
    #!/bin/sh
    #
    # Filter sieb (variante 0)
    #
    # Aufruf: sieb0
    #
    a=1
    while read n
    do
        a=`expr $a '*' -1`
        if test $a -gt 0
        then
            echo $n
        fi
    done
    
  • Problem: In den durchgelassenen Zeilen gehen Leerzeichen verloren, wenn mehrere zusammenhängende Leerzeichen auftreten (read-Kommando)
  • Diese Filter ist zu verallgemeinern. Beim Aufruf sieba +n soll jede n-te Zeile kopiert werden. Beim Aufruf sieba -n soll jede n-te Zeile ignoriert werden. Für n sollen die Werte 2 bis 9 zugelassen sein; dies ist zu überprüfen!
    #!/bin/sh
    #
    # Filter sieba
    #
    # Aufruf: sieba +n    kopieren jeder n-ten Zeile
    #         sieba -n    ignorieren jeder n-ten Zeile
    #
    
    if test $# -ne 1
    then
        echo "Benutze:   sieba +n  oder  sieba -n"
        echo "1 < n < 10"
        exit 1
    fi
    x=`echo "$1" | cut -c1`
    case $x in
        '-' ) : ;;
        '+' ) : ;;
        *   ) echo "Benutze:   sieba +n  oder  sieba -n"
              echo "1 < n < 10"
              exit 1
              ;;
    esac
    x=`echo "$1" | cut -c2`
    case $x in
        [2-9] ) : ;;
        *   ) echo "Benutze:   sieba +n  oder  sieba -n"
              echo "1 < n < 10"
              exit 1
              ;;
    esac
            
    a=`echo "$1" | cut -c2`
    if test "$1" -gt 0
    then
        d=1
    else
        d=0
    fi
    r=$a
    while read n
    do
        a=`expr $a '-' 1`
        if test $d -eq 0
        then
            if test $a -eq 0 
            then
                a=$r
                continue
            else
                echo $n
                continue
            fi
        fi
        if test $a -eq 0 
        then
            echo $n
            a=$r
        fi
    done
    


  • Ki generiertes Bild

    Offen für Argumente geht in die zweite Runde

    Online-Debattenformat der Juniorprofessur Soziologie der TU Chemnitz thematisiert am 10. September 2025 die Rolle der Solarenergie im Zuge der Energiewende …

  • Gruppe vieler Menschen

    Let's run #TUCgether!

    Zum Jubiläum des Chemnitzer Firmenlaufs gingen 266 Laufbegeisterte für die TU Chemnitz an den Start …

  • Menschen stehen vor einer Leinwand

    Erfolgreiche Summer School an der TU Chemnitz

    Professur Medienpsychologie und die Hochschulallianz Across begrüßten zur Summer School „How much science is in science fiction?“ medienbegeisterte Nachwuchswissenschaftlerinnen und -wissenschaftler aus neun verschiedenen Ländern …

  • Menschen stehen vor einem Haus

    Als Azubi an die Uni? Ja, klar!

    Kanzler der TU Chemnitz begrüßte neue Auszubildende und gratulierte Absolventinnen und Absolventen zum erfolgreichen Berufsabschluss – TU Chemnitz bildet aktuell in zehn Berufen aus …