Werte in 2 Variablen subtrahieren

M

Mad_van_Bert

Grünschnabel
Hallo ihr,

ich habe folgendes Problem:
Ich habe in zwei Variablen jeweils 18 Zahlen (0-99 ohne Komma) stehen die ich vorher mit einem awk-Befehl selektiert habe.
Die Variablen sehen also wie folgt aus:
Var1____Var2
15_____4
17_____7
3______12
35_____14
...

Es soll nun z.b. 15-4 gerechnet werden, 17-7 usw.
In meinem Script wird jedoch fälschlicherweise jede Zahl einmal mit einer anderen Subtrahiert, d.h. ich bekomme anstatt 18 Ergebnissen komischerweise 648 ;-)

for a in `cat Tab.dat | awk {'print $4'} | awk -F: {'print $1'}`
do
for b in `cat Tab.dat | awk {'print $4'} | awk -F: {'print $2'}`
do
ergebnis=`( expr $a - $b )`
echo "$ergebnis" >> bla.dat
done
done

Was muss ich denn ändern, damit dies funktioniert?
Ich hoffe, Ihr könnt mir helfen =)

MfG
Mad van Bert
 
Hallo,

das liegt an dem Aufbau deiner Schleifen, duch die zweite Schleife sagst du das er alle Zahlen die er mit dem zweiten awk-Befehl findet, von der Abziehen soll, die er grade in $a gespeichert ist.

Kleiner Tip am Rande, awk kann auch Rechnen ;)

mfg
HeadCrash
 
das liegt an dem Aufbau deiner Schleifen, duch die zweite Schleife sagst du das er alle Zahlen die er mit dem zweiten awk-Befehl findet, von der Abziehen soll, die er grade in $a gespeichert ist.
das klingt einleuchtend ;-)

ist das Rechnen mit awk in diesem Bsp. einfacher?
Bin erst seit August in der Unix-Materie so richtig drin. Es fällt mir alles noch etwas schwer ;-)
mfg
MvB
 
In diesem Fall ist das Rechnen mit awk um Welten einfacher :D

Code:
echo "5 2" | awk '{ print($1 - $2) }'
3

mfg
HeadCrash
 
das sieht wirklich ziemlich einfach aus ;-)

Nur wie binde ich das in mein Script ein?
So
echo "$a $b" | awk '{ print($1 - $2) }'
ja wohl nicht, denn dann bekomme ich als Ergebnis
28
30
25
15
8
13
13
10
11
15
16
13
19
7
10
4
10
-4
17
20
8
19
18
17
19
16
11
11
14
12
18
15
20
21
15

Dies sind genau die Zahlen die in $a und $b drinstehen ;-)

mfg
MvB
 
Zuletzt bearbeitet:
Du brauchst dein Script nicht, es geht mit einem awk-Einzeiler:

Code:
awk '{split($4,a,";"); print (a[1]-a[2])}' Tab.dat
 
juhu, es funktioniert =)

Musste nur noch das ; in ein : ändern, weil die 2 Zahlen imme rmit einem : getrennt sind =)
Vielen Dank

mfg
MvB
 
Zuletzt bearbeitet:

Ähnliche Themen

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

skript zum löschen doppelter dateien

Shellskript - Fehler in Cron

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

Akonadi startet nicht mehr

Zurück
Oben