lapvika
Goto Top

Bestimmte Zeilen einer Datei addieren und ausgeben - Linux

Hallo zusammen,


ich habe eine Datei die wie folgt aussieht:

2147483648 - System1_lun01
2147483648 - System1_lun02
2147483648 - System1_lun03
2147483648 - System1_lun04
2147483648 - System1_lun05
2147483648 - System1_lun06
2147483648 - System1_lun07
2147483648 - System1_lun08
2147483648 - System1_lun09
2147483648 - System1_lun10
2147483648 - System1_lun11
2147483648 - System1_lun12
2147483648 - System1_lun13
2147483648 - System1_lun14
2306867200 - System1_lun15
2147483648 - System1_lun16
2306867200 - System1_lun17
2147483648 - System1_lun18
2306867200 - System1_lun19
2306867200 - System1_lun20


Die Zahlen sind die Größenangaben in KB.

ich möchte nun pro System die Gesamtgröße in TB ausgeben lassen und in eine neue Datei schreiben lassen.

Dazu nutze ich folgenden Befehl:

cat "/var/tmp/test.txt" | awk -F ' - |_lun|_meta|_daten' 'BEGIN{sys = ""; size = 0 }{if(sys == ""){sys = $2}; tot = size / 1073741824; if(sys == $2){size += $1}else{printf("%s - %.2fTB\n",sys,tot);size = $1;sys = $2}}END{printf("%s - %.2fTB\n",sys,tot)}' > /var/tmp/test.csv

In der Datei /var/tmp/test.csv werden dann die Zeilen addiert und als eine Zeile ausgegeben:

cat /var/tmp/test.csv
system1 - 38.59TB

Nun zu meinem Problem. Hier fehlen 2 TB in der Liste. Es müssten eigentlich 40.59 angezeigt werden, jedoch werden in meiner .csv-Datei nur 38.59TB angezeigt.

Weiß jemand, warum mir 2TB weniger angezeigt werden, als tatsächlich vorhanden? Ich finde einfach nicht den Fehler.

Vielen Dank!

Content-Key: 272930

Url: https://administrator.de/contentid/272930

Printed on: April 20, 2024 at 00:04 o'clock

Member: colinardo
Solution colinardo May 26, 2015 updated at 09:38:21 (UTC)
Goto Top
Hallo Lapvika,
da hat sich doch tatsächlich ein Fehler in meinen damaligen Code eingeschlichen face-wink (eine Berechnung an der falschen Position so dass die letzte Zeile nicht mit in der Summe einbezogen wurde), sorry dafür:
cat "/var/tmp/test.txt" | awk -F ' - |_lun|_meta|_daten' 'BEGIN{sys = ""; size = 0 }{if(sys == ""){sys = $2};if(sys == $2){size += $1}else{printf("%s - %.2fTB\n",sys,tot);size = $1;sys = $2}; tot = size / 1073741824}END{printf("%s - %.2fTB\n",sys,tot)}' >/var/tmp/test.csv  
Grüße Uwe
Member: lapvika
lapvika May 26, 2015 at 09:38:43 (UTC)
Goto Top
Super, vielen Dank!