ubuntuusers.de

Daten aus einer Datei extrahieren und berechnen

Status: Gelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

mrxtreme

Anmeldungsdatum:
16. Februar 2007

Beiträge: 28

Wohnort: Berlin

Hallo,

ich würde gern Daten in der Kommandozeile aufarbeiten, um diese auswerten zu können. Prinzipiell will ich 3 Spalten aus einer Tabelle nehmen, berechnungen damit durchführen und diese dann in einer neuen Datei mit 2 Spalten ausgeben. Also wie in einer Tabellenkalkulation. Ich habe allerdings sehr viele Dateien so, dass eine manuelle Bearbeitung nicht geht. Die Datei hat folgende Zeilen, die alle dem gleichen Schema folgen:

flux1:, 0.173368298368298, 1.34591263199368e-13, 3.74333740222762e-12, 3.36293155282202e-14, -1.1073763816776e-11
flux1:, 0.174533799533799, 1.32572644097363e-13, 3.80867299252549e-12, 3.25768348227753e-14, -1.12648556645891e-11
flux1:, 0.1756993006993, 1.30440021909728e-13, 3.87283609076762e-12, 3.11921424340833e-14, -1.1427019718579e-11
flux1:, 0.176864801864801, 1.2802178903344e-13, 3.93511266858528e-12, 2.94865534701474e-14, -1.15688975775332e-11
flux1:, 0.178030303030303, 1.25444811752123e-13, 3.99674281615876e-12, 2.7756614187792e-14, -1.17346942054548e-11
flux1:, 0.179195804195804, 1.22974555387019e-13, 4.0589586933989e-12, 2.61793013279594e-14, -1.19234985617353e-11
...

Die neue Datei soll folgendermassen aussehen:

  • Spalte1_neu = 100 / Spalte2_alt

  • Saplte2_neu = Spalte5_alt / Spalte6_alt

Ich hoffe, dass ihr mir einige Tips geben könnt. Ich habs schon hinbekommen einzelne Spalten mit sed zu extrahieren, habe dann aber das Problem, dass ich keine berechnungen durchführen kann. Ich kenne leider keinen praktikablen Weg Fließkommazahlen in der Shell zu berechnen.

Vielen Dank im Voraus!

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Servus,

mrxtreme schrieb:

Ich kenne leider keinen praktikablen Weg Fließkommazahlen in der Shell zu berechnen.

das können auch nur besondere Shells wie die zsh. Du wirst also in der Bash so oder so ein externes Programm (bc z.B.) verwenden müssen. Und da kannst du es auch gleich ganz mit awk oder Python/Ruby/Perl machen.

awk:

#!/usr/bin/awk -f

BEGIN {
	# Feldtrenner auf Komma stellen.
	FS=","
}

{
	# Die 12 gibt die Zahl der Nachkommastellen an.
	printf "%.12f, %.12f\n", 100.0 / $2, $5 / $6
}

Als „foo.awk“ speichern, ausführbar machen und dann mit einer Umlenkung der Eingabe aufrufen:

$ ./foo.awk < datei_mit_den_daten

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13224

Vain schrieb:

Als „foo.awk“ speichern, ausführbar machen und dann mit einer Umlenkung der Eingabe aufrufen:

$ ./foo.awk < datei_mit_den_daten

Muss man gar nicht. So geht es auch:

1
$ ./foo.awk datei_mit_den_daten

Ciao

robert

mrxtreme

(Themenstarter)

Anmeldungsdatum:
16. Februar 2007

Beiträge: 28

Wohnort: Berlin

Wow, an awk hatte ich ich überhaupt nicht gedacht!

Es funktioniert prima. Vielen vielen Dank!

Antworten |