bash script: datei zeilenweise einlesen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
startx
Beiträge: 3165
Registriert: 07.12.2002 19:29:48
Wohnort: london

bash script: datei zeilenweise einlesen

Beitrag von startx » 01.02.2006 15:21:30

hallo.

also ich gebs gleich zu anfang zu: um bash scripting hab ich immer nen riesen bogen gemacht. jetzt möchte ich aber folgendes hinkriegen:

ich mochte aus einer datei zeilenweise variablen einlesen und verarbeiten,
also nehmen wir an ich hab folgende datei:

Code: Alles auswählen

#
# dies ist meine beispiel log datei
#

400
600
5

ich möchte jetzt die zeilen 5,6, und 7 in variablen haben und z.B. 5+6 / 7 ausgeben
das script sollte also also ergebnis 200 ( (400+600):5 ) zurückgeben.

ok ich könnte jetzt ein paar stunden lang RTFM machen, aber bitte erspart mir das :)

Methusalix

bash script: datei zeilenweise einlesen

Beitrag von Methusalix » 01.02.2006 19:28:14

Hallo,

ohne Nachfragen wird es nicht gehen. Die bash kann nur positive Ganzzahlen berechen; ist das für Deinen Zweck ok ? Was das Auslesen der Daten angeht, ist es immer die gleiche Datei mit der gleichen Struktur (oder auch andere Dateien, aber mit der gleichen Struktur)?
Ich denke, dann wird`s gehen.

Gruß
Matthias

Benutzeravatar
degen
Beiträge: 93
Registriert: 29.01.2005 16:49:31
Wohnort: Lößnitz

Beitrag von degen » 01.02.2006 20:11:57

Rechnen ist in der Bash auch mit Gleitkommazahlen möglich, hierzu wir bc benötigt.

Das folgende Script liest aber immer die komplette Zeile (5,6,7) aus. Wenn nach der Zahl noch andere Zeichen folgen, könnten Fehlermeldungen auftauchen. Da könnte eventuell eine Pipe mit cut Abhilfe schaffen.

Wenn die Zahlen nicht jedesmal an der selben Stelle stehen, wird es natürlich etwas schwieriger.

Nachkommastellen sind möglich, negative Zahlen dürften auch funktionieren, habe das aber nicht ausführlich getestet

Code: Alles auswählen

#!/bin/bash

#hier den Pfad der Datei angeben
DATEI=

A=$(sed -n '5p' $DATEI)
B=$(sed -n '6p' $DATEI)
C=$(sed -n '7p' $DATEI)

# mit scale wird die Anzahl der Nachkommastellen festgelegt
ERGEBNIS=$(echo "scale=0 ; ($A+$B)/$C" | bc)

echo "Das Ergebnis ist $ERGEBNIS."

exit 0
Zuletzt geändert von degen am 01.02.2006 20:22:21, insgesamt 1-mal geändert.
Irren ist menschlich. Aber wenn man richtig Mist bauen will, braucht man einen Computer.

Benutzeravatar
startx
Beiträge: 3165
Registriert: 07.12.2002 19:29:48
Wohnort: london

Beitrag von startx » 01.02.2006 20:18:18

Die bash kann nur positive Ganzzahlen berechen; ist das für Deinen Zweck ok
voll und ganz, was anderes kann garnicht vorkommen :)

@degen

teste ich nachher mal,
danke schon mal auf jeden fall.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 01.02.2006 20:37:08

bin nicht sehr geübt mit Perl Oneliner, hat aber Spaß gemacht und kann beliebige Expressions auswerten:

Code: Alles auswählen

gms@gms1:~$ cat x.txt
#
#
#

400
600
5
gms@gms1:~$ perl -e '$ei=shift;@l=<>;while($ei=~/^([^\d]*)(\d+)(.*)$/){$ei=$3;$eo.=$1.$l[$2-1]}$eo.=$ei;print eval $eo,"\n";' '(5+6)/7' x.txt
200
gms@gms1:~$
Gruß
gms

Methusalix

bash script: datei zeilenweise einlesen

Beitrag von Methusalix » 01.02.2006 20:43:13

Hallo,

mit Ganzzahlen wird es auf jeden Fall funktionieren.

@degen: Wieso schneidest Du denn die Nachkommazahlen raus, wenn es auch mit geht?

Gruß
Matthias

Benutzeravatar
degen
Beiträge: 93
Registriert: 29.01.2005 16:49:31
Wohnort: Lößnitz

Re: bash script: datei zeilenweise einlesen

Beitrag von degen » 01.02.2006 20:54:29

Matthias-GE hat geschrieben: @degen: Wieso schneidest Du denn die Nachkommazahlen raus, wenn es auch mit geht?
War nur eine Sache der Form, damit er nicht die ganzen Nullen hinter dem Punkt (Komma) ausgibt. Wenn man z.B. scale=5 an gibt, würde ja als Ergebnis 200.00000 ausgegeben werden. Das wollte ich nur unterbinden.

Kann man ja bei Bedarf anpassen.

mfg degen
Irren ist menschlich. Aber wenn man richtig Mist bauen will, braucht man einen Computer.

Benutzeravatar
startx
Beiträge: 3165
Registriert: 07.12.2002 19:29:48
Wohnort: london

Beitrag von startx » 01.02.2006 21:08:27

Wenn man z.B. scale=5 an gibt, ...
ist schon prima. ich lern hier in 5 minuten mehr als nach einer stunde scripting tutorial lesen heute morgen ...

Antworten