Anzeige:
Ergebnis 1 bis 6 von 6

Thema: grep und awk

  1. #1
    Registrierter Benutzer
    Registriert seit
    Nov 2001
    Ort
    /dev/null
    Beiträge
    183

    grep und awk

    Hallo,

    die beiden Befehle gehören wohl zu den Klassikern der *nix-Tools. Und man kann schöne Pipes damit bauen:
    Code:
    ifconfig eth0 | grep "inet addr:" | awk '{ print $2 }' | awk -F ':' '{ print $2 }'
    Dieses Beispiel holt aus der 'ifconfig'-Ausgabe die IP-Adresse und gibt sie aus.
    Weitere Beispiele erwünscht, vielleicht mal was mit sed?

    Spass damit,

    emwe

  2. #2
    Moderat0r Avatar von geronet
    Registriert seit
    May 2001
    Ort
    Grainau
    Beiträge
    6.099
    Ja klar, hier bitte:





    Zum Beispiel aus dem Startscript von meinem Diskless Cluster:


    Code:
    IP=`/sbin/ifconfig eth0 | awk '/inet/ { print $2 } ' | sed -e s/addr://`
    
    if [ "$IP" != "" ]; then
    
      echo "Starting services for diskless workstation:"
    
    
    
      # get hostname
    
      HOSTNAME=`/usr/bin/nslookup $IP | awk '/Name/ { print $2 } ' `
    
    
    
      if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then
    
        # get host-number
    
        declare -i HOST_NUM=`echo $IP | sed -e s/[0-9]*.[0-9]*.[0-9]*.//`-10
    
        HOSTNAME="Ace$HOST_NUM.Bachmaier"
    
      fi
    Geändert von geronet (13.04.02 um 19:25 Uhr)

  3. #3
    Moderator Avatar von fs111
    Registriert seit
    Mar 2002
    Ort
    ~
    Beiträge
    3.661
    Auf meiner Redhat 7.2 sieht das ganze folgendermaßen aus:


    Code:
    /sbin/ifconfig ppp0 | grep "inet Adr" | awk '{ print $2 }' | awk -F ':' '{ print $2 }'
    und hier ein kleines Skript zum auslesen der online Zeit für Leute mir dsl ohne flat


    Code:
    #!/bin/bash
    
    
    date | cut -c 5-7 |
    
    read month &&
    
    
    cat /var/log/messages |
    grep "$month" |
    grep  "Connect time"
    Grüße fs111
    Geändert von fs111 (13.04.02 um 20:30 Uhr)

  4. #4
    Registrierter Benutzer
    Registriert seit
    Apr 2002
    Beiträge
    19

    Exclamation

    hai zusammen.

    bitte versteht meine folgenden worte als kleinen
    tip am rande und nicht als kritik.

    > ifconfig eth0 | grep "inet addr:" | awk '{ print $2 }' | awk -F ':' '{ print $2 }'

    nun es brennt mir halt doch immer wieder in den
    augen, wenn ich diese oder ähnliche "grep"/"awk"-verschachtelungen sehe.

    in diesem fall ist z.b. der grep überflüssig. denn
    awk '/inet addr:/ { print $2 }'
    erledigt den gleichen job mit nur einem
    kommando und lässt so ein mächites tools wie
    "awk" nicht nur auf die kleinsten aller spatzen
    schiessen *g*

    wenn schon viel verschachteln, dann ist "cut" sicher
    die schnellere wahl, gerade wenn die eingabe sehr
    gross wäre.

    natürlich ist unter gewissen umständen auch aus
    geschwindigkeitsgründen der "grep" einem "awk"
    vorzuziehen. bei diesen fällen bin ich aber meistens
    direkt beim "C"-prommieren gelandet.

    es gibt natürlich noch einige möglichkeiten den
    2. awk einzusparen, aber ich denke ich hab
    jetzt doch schon genug klug*******erei
    abgesondert

    viele gruesse
    lankin

  5. #5
    rtulke
    Gast
    dein stück script ist leider nicht viel besser :
    Code:
    atmk:/etc/bind# ifconfig | awk '/inet addr: / { print $2 }'
    addr:193.201.54.108
    addr:193.201.54.188
    addr:193.201.54.189
    addr:193.201.54.190
    es sollte so ausschauen (mit sed):

    Code:
    atmk:/etc/bind# ifconfig | awk '/inet addr:/ { print $2 }' |sed 's/.*://';
    193.201.54.108
    193.201.54.188
    193.201.54.189
    193.201.54.190
    127.0.0.1
    aber viele Wege führen nach Rom.

    Ein paar andere Bsp. aus meinem alltäglichen gebrauch:

    Netstat übersicht tabellarisch
    Code:
    netstat -aep --numeric-hosts --numeric-ports | egrep '(ESTABLISHED|LISTEN)' | sed 's/:\([0-9\*]*\) / \1 /g;s/\// /g' | awk '{print $8 " ip: " $4 "\tto_ip: " $6 "\tport: " $5 "\tuser: " $9 "\tname: " $12 "\tpid: " $11}'
    Geändert von rtulke (15.09.04 um 17:43 Uhr)

  6. #6
    Premium Pils
    Registriert seit
    May 2001
    Ort
    Berlin
    Beiträge
    665
    hier ein Beispiel fuer eine Verhaspelung *g*
    Eigentlich sollte hier ein sed Befehl stehen der in einem Abwasch alle Devices
    nach IP Adressen scannt. Ist zwar gegen die Unix Philosophie . (von wegen Pipes usw.)
    grrr, ausserdem wollte ich keine Statischen Elemente mehr drin haben:

    Code:
    ifconfig | sed -e '1,$s/inet addr://' -e 's/[0-9]\{0,3\}\.[0-9]\{0,3\}\.[0-9]\{0,3\}\.[0-9]\{0,3\}  ://' -e 's/[\t ]//g' -e 's/[a-z,A-Z]//g' -e 's/1^[^:0*]//g' -e 's/[:]//g' -e 's/255*//g' -e 's/(*)*//g' -e 's/^0*.0//g'

    todo: vereinfachen mit oderverknüpfungen
    genau 4 aber nicht mehr zahlen
    Geändert von linuxhanz (16.09.04 um 21:14 Uhr)
    "Das Fernsehen, eben noch revolutionär auf der Bühne von 1989, war vom Täter zum Hirn geworden, zu einer einzigen Wahrheitsmaschine" (Rainald Goetz --word)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •