Eine Zahl für bc "bereinigen"

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von L0rd, 31.10.2011.

  1. L0rd

    L0rd Mitglied

    Dabei seit:
    28.04.2006
    Beiträge:
    38
    Zustimmungen:
    0
    Abend !

    habe ein Problemchen bei Rechnen mit bc. Ich lese eine Zahl aus einer Datei aus und will damit mit Hilfe von bc rechnen, nun leider weigert sich bc hier. Setze ich die Variable mit der gerechnet wird testweise vorher fest, dann rechnet er.

    Code:
    zahl=`cat textdatei | sed -n /'blabla'/p | cut -d'<' -f15 | sed 's/\n//g'`;
    zahl=`echo "scale=3 ; $zahl/2+1" | bc`
    echo $zahl;
    
    Das Problem hatte ich mal bei PHP es gibt da ne Funktion dass unsichtbaren Zeichen vor und hinter der Zahl wegmacht.

    Und hier meiner Meinung nach ist das gleiche Problem. Kennt jemand so ein Befehl für shell ? Bin natürlich auch für andere Vorschläge offen ;)

    Danke !
     
  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. dmaphy

    dmaphy Routinier

    Dabei seit:
    16.04.2004
    Beiträge:
    482
    Zustimmungen:
    0
    Ort:
    Hamburg
  4. yai

    yai yet another idiot

    Dabei seit:
    22.01.2007
    Beiträge:
    166
    Zustimmungen:
    0
    abgesehen von einem klassischen "useless use of cat", versuch mal awk statt sed:
    zahl=`awk 'BEGIN { FS = "<" } ; /blabla/ { printf $5 }' textdatei`
     
  5. L0rd

    L0rd Mitglied

    Dabei seit:
    28.04.2006
    Beiträge:
    38
    Zustimmungen:
    0
    Danke dmaphy ! aber bei tr fand ich keine Möglichkein nur Zahlen durchzulassen, mit -d kann man ja was definiertes abschneiden, Ausdruck "alles ausser Zahlen" kenne ich leider nicht. Muss zugeben bin auch kein regxp Akrobat :).

    Lösung von yai ist interessanter. Danke auch ! nur ich habe nicht den ganzen Ausdruck gepostet, wegen Überschaubarkeit. Hier ist der ganze:

    Code:
    zahl=`cat textdatei | sed -n /'blabla'/p | sed 's/\t//g' | sed 's/>/</g' | cut -d'<' -f15 | sed 's/\n//g'`;
    
    diese textdatei ist eine html datei. Ich filtere nach einer Zahl das zw. ">" und "<" steht. mit sed ersetze ich dabei alle ">" durch "<" und cute dann nach 15ten Vorkommen.
    kann man das alles in awk umsetzen ? dann probiere ich das aus, denn awk habe ich noch nie benutzt weil es zu komplex ist. Programmiere nur ab und zu was, mit dem geschicktem Einsatz einfacher Befehle, wie man sieht :).
     
  6. L0rd

    L0rd Mitglied

    Dabei seit:
    28.04.2006
    Beiträge:
    38
    Zustimmungen:
    0
    habe bisi selbst google bemüht und so hats funktioniert:
    Code:
    zahl=`awk 'BEGIN { FS = "</?[A-Za-z]+[^>]*>" } ; /blabla/ { printf $5 }' textdatei`
    
    hab regxp für Tags hinzugefügt und als Trenner verwendet, ist ganz praktisch, ab hier muss man nur noch Zählen können um das Richtige herauszufiltern.

    Mein Fehler lag aber woanders, die $zahl war mit Komma und nicht mit Punkt, deswegen hat sich bc geweigert zu rechnen.

    ich bedanke mich...
     
  7. yai

    yai yet another idiot

    Dabei seit:
    22.01.2007
    Beiträge:
    166
    Zustimmungen:
    0
    noch 2 Tips:
    1. warum rechnest du mit bc? awk kann das auch.
    2. dein Ausdruck mit 5 Pipes ist nicht sehr ineffizient, das geht mit Sicherheit auch mit einem einzelnen sed. nicht vergessen: jede Pipe macht 3 filehandles auf, stdin/stdout/stderr, das sind schon 15, dazu die `` macht 18.
    Tschöö.
     
  8. L0rd

    L0rd Mitglied

    Dabei seit:
    28.04.2006
    Beiträge:
    38
    Zustimmungen:
    0
    wie gesagt awk ist für mich zu schwer
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. amöbe

    amöbe Tripel-As

    Dabei seit:
    21.01.2007
    Beiträge:
    188
    Zustimmungen:
    0
    Naja, also Rechnungen sind in awk auch nicht groß anders als mit bc. Es gibt ganz normal +,-,*,/,^ und %, alle Variablen werden automatisch mit 0 initialisiert. bc brauchst du nur für kompliziertere Numerik.

    Uhm... wtf? :)
     
  11. yai

    yai yet another idiot

    Dabei seit:
    22.01.2007
    Beiträge:
    166
    Zustimmungen:
    0
    brblglpf... zbzk :-)
     
Thema:

Eine Zahl für bc "bereinigen"

Die Seite wird geladen...

Eine Zahl für bc "bereinigen" - Ähnliche Themen

  1. Samsung zahlte 2013 eine Milliarde US-Dollar Lizenzgebühren an Microsoft

    Samsung zahlte 2013 eine Milliarde US-Dollar Lizenzgebühren an Microsoft: Ein kürzlich aufgetauchtes Gerichtsdokument belegt, dass im Rahmen von Patentverträgen Samsung im vergangenen Jahr mehr als eine Milliarde...
  2. Zahl innerhalb eines Dateinamens auslesen

    Zahl innerhalb eines Dateinamens auslesen: Hallo, ich habe eine große Anzahl an Dateien mit konstantem Dateinamen + einer Zahl, allerdings sind sie nicht fortlaufend nummeriert, also...
  3. sed: alle Zeilen entfernen die keine Zahl enthalten

    sed: alle Zeilen entfernen die keine Zahl enthalten: Hallo, ich habe eine Datei welche vom Aufbau her so aussieht: bla blub 1073643 foobar 105474Ich möchte gern alle Zeilen entfernen die keine...
  4. Suche einen Countdown Zähler

    Suche einen Countdown Zähler: Ich suche ein Programm welches eine eingestellte Zeit rückwärts runterzählt. Meine Googleeingaben haben nicht besonders gefruchtet. Sowas ist...
  5. parameter zählen und jeden einer variable zuordnen

    parameter zählen und jeden einer variable zuordnen: hallo shell-freunde. ich befasse mich nur in meiner freizeit mit shellscripten, stehe aber nun vor einem problem, bei dessen lösung ich ein wenig...