2016-04-12 17 views
-1

Ich habe ein Programm, das mir Ergebnisse in einem wissenschaftlichen Python-Format, wie dies gibt:Wie Leistung von zehn Ergebnissen mit grep Befehl extrahieren (bash)

10.0889E-002 

zum Beispiel.

Ich möchte grep Befehl (oder awk) verwenden, um dieses Ergebnis zu extrahieren, aber ich finde keine Möglichkeit, dieses "E-002" korrekt zu behandeln. Das entsprechende Ergebnis WITHOUT E-002 (aber dafür verantwortlich) würde in einer Variablen gespeichert werden, so dass ich alle Arten von Operationen mit anderen Variablen und Zahlen machen kann.

Ich denke, dass ich Python offensichtlich besser verwenden sollte, aber ich suche nach einer schnellen und schmutzigen Lösung für jetzt.

Beispiel:

Lassen Sie uns sagen, dass ich einen Dateinamen haben, die nur eine Zeile haben, enthaltend:

10.0889E-002 

oder eine beliebige Anzahl mit dieser Art von Notation.

Ich möchte dies in eine Variable in bash, aber ohne Zehnerpotenz Notation. In myfile.sh:

a=`grep '' filename | awk '{print $1}'` 

Aber das für E-002 berücksichtigt nicht so, dass ich mit meiner Variable eine ganze Art von Operation zu tun.

+1

Ich verstehe nicht. Können Sie uns bitte Code zeigen, der versucht, das zu implementieren, was Sie suchen, und uns dann Ihre erwarteten Ergebnisse und die Ergebnisse zeigen, die Sie tatsächlich erhalten? Ein [MCVE] (http://stackoverflow.com/help/mcve) hilft immer wirklich, eine Frage zu verbessern. – ghoti

Antwort

2

awk kann man erkennen, interpretieren gerade fein:

$ echo '10.0889E-002' | awk '{ print $1+0 }' 
> 0.100889 
+0

Danke, ich wusste nicht diese +0 Option von awk –

+1

Sie brauchen das nicht, es ist nur eine Möglichkeit, um 'awk' mit einer anderen Darstellung der Zahl zu erzwingen. – pfnuesel

+1

@B_runo Ich sehe deine bearbeitete Frage jetzt. In diesem Fall ist die '+ 0' genau das was du brauchst, denke ich. – pfnuesel

2

Verwendung printf

$ printf "%f\n" 10.0889E-002 
0.100889 
-1

So etwas wie

-?\d*\.?\d+[eE]?-?\d*