Eine Zahl für bc "bereinigen"

L

L0rd

Mitglied
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 !
 
abgesehen von einem klassischen "useless use of cat", versuch mal awk statt sed:
zahl=`awk 'BEGIN { FS = "<" } ; /blabla/ { printf $5 }' textdatei`
 
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 :).
 
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...
 
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öö.
 
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.

2. dein Ausdruck mit 5 Pipes ist nicht sehr ineffizient [...]
Uhm... wtf? :)
 

Ähnliche Themen

bash: Fehlermeldung und Werte in Array sortieren?

Newbie sucht Hilfe: Zahl aus Datei mit grep/cut/sed lesen und schreiben?

Server-Monitoring mit RRDTool

Zurück
Oben