bestimmte Zeile einer csv finden und löschen

Sempervivum

Erfahrenes Mitglied
Wie geschrieben, ich habe schon lange keine Erfahrung mehr mit bash und ich hatte die betr. Zeile nur von Stackoverflow übernommen und dort eingefügt. Auch kein Linux zur Hand um es zu testen.
Was genau funktioniert denn nicht, läuft das Skript überhaupt nicht mehr oder sind nur die leeren Zeilen immer noch drin? Wenn letzteres, dann mal mit echo checken, ob diese temp. Datei wirklich leer ist.
 

Sempervivum

Erfahrenes Mitglied
Dann bin ich leider überfragt. Aber wenn Du es am liebsten ohne WSL machen würdest, würde sich als Alternative Powershell oder Python anbieten.
 

cliodriver

Mitglied
ja, wäre recht, nur muss ich da von vorne anfangen mit der Recherche

ich hab nochmal das Lankabel gezogen und somit einen Verbindungsabbruch provoziert. Die leere Zeile wird so eingetragen

Code:
29.12.2022 13:18;7;11,7;7,5;82,5;77,0;147,6;80;80;47;49;0;0;100;0;155;37;75;0;16;10;140;1000;65,1;0;6,6;3,4;75,5;120;73,1;-20;-20;2;-0;0;0;0;0;3;0;0;0;0;100;2;0;103;5,6;0;100;0;0;13;120;30;-20;26,6;27;24;18;1;1;46,4;45;23,7;12,3;1;1;50,3;47;20;20;1;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;21,7;0;76,5;0;-20;0;-20;0;-20;0;0;47;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;67,2;0;93707,5;100;3;3;3;0;1;6;0;0;0;0;0;0;0;7,99;12,62;633;0;10;3;0;0;0;47;0;0;49F;1001;7D00;0;0;0;0;200;
29.12.2022 13:16;7;7,2;7,6;82,0;77,0;151,6;75;74;14;14;0;0;92;0;146;43;75;0;16;10;140;1000;63,5;0;6,6;3,4;75,2;120;72,3;-20;-20;2;-0;0;0;0;0;3;0;0;0;0;99;2;0;105;14,9;0;100;0;0;13;120;30;-20;26,6;27;24;18;1;1;46,9;45;23,7;12,3;1;1;50,0;47;20;20;1;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;21,7;0;75,7;0;-20;0;-20;0;-20;0;0;47;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;67,2;0;93707,5;100;3;3;3;0;1;6;0;0;0;0;0;0;0;8,00;12,60;635;0;10;3;0;0;0;47;0;0;49F;1001;7D00;0;0;0;0;200;
29.12.2022 13:14
29.12.2022 13:12;5;7,0;7,6;77,0;78;126,5;51;51;10;9;0;0;93;93;81;67;75;0;16;10;140;1000;66,4;65;6,4;3,4;74,9;120;70,8;-20;-20;2;-0;724;454;3;0;3;0;0;0;0;99;3;78;101;15,6;0;100;0;0;13;120;30;-20;26,4;27;24;18;1;1;46,4;45;23,7;12,3;1;1;46,1;47;20;20;1;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;21,7;0;75,7;0;-20;0;-20;0;-20;0;0;47;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;67,2;0;93704,4;100;3;3;3;0;1;6;0;0;0;0;0;0;0;8,00;12,59;635;93;10;3;0;0;0;52;71;0;49F;1041;7C00;0;0;0;0;200;
29.12.2022 13:10;5;7,9;7,5;76,5;78;125,8;55;55;17;15;0;0;100;79;88;70;75;0;16;10;140;1000;65,9;65;6,4;3,4;74,7;120;70,3;-20;-20;2;-0;735;0;3;0;3;0;0;0;0;99;3;78;98;13,2;0;100;0;0;13;120;29;-20;26,4;27;24;18;1;1;46,4;45;23,7;12,3;1;1;44,6;47;20;20;1;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;21,7;0;75,5;0;-20;0;-20;0;-20;0;0;47;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;65,2;0;93702,6;100;3;3;3;0;1;6;0;0;0;0;0;0;0;8,01;12,59;636;79;10;3;0;0;0;52;71;0;49F;1041;7C00;0;0;0;0;200;
29.12.2022 13:08;5;7,8;7,6;77,8;78;126,7;51;50;7;9;0;0;91;31;83;89;75;0;16;10;140;1000;65,9;65;6,4;3,5;74,7;120;69,5;-20;-20;2;-0;7;0;0;0;3;0;0;0;0;99;3;78;103;13,4;0;100;0;0;13;120;29;-20;26,4;26;24;18;1;1;46,1;45;23,7;12,3;1;1;43,8;46;20;20;1;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;21,7;0;75,5;0;-20;0;-20;0;-20;0;0;46;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;63,1;0;93701,5;100;3;3;3;0;1;6;0;0;0;0;0;0;0;8,01;12,59;636;31;10;3;0;0;0;51;71;0;49F;1001;7C00;0;0;0;0;200;
 

Technipion

Erfahrenes Mitglied
Aber wenn Du es am liebsten ohne WSL machen würdest, würde sich als Alternative Powershell oder Python anbieten.
Ich bin natürlich ein großer Freund von Python. Für solche Logging-Aufgaben ist BASH aber tatsächlich perfekt. Mit Python wäre allerdings der Umzug auf Windows gar kein Problem. Falls du also lieber ein Python-Skript bemühen möchtest @cliodriver , können wir das gerne machen.

Ich habe trotzdem mal versucht dein Skript ein wenig umzuschreiben. Anstatt alles in Dateipuffern zu erledigen, wird es jetzt direkt im Bash-Skript gemacht. Theoretisch müsste das so laufen, allerdings kann ich es nicht testen, da ich ja die Originalausgabe des netcat-Befehls nicht habe.
Bash:
!/bin/bash
# shellscript zum Loggen von Telnet Daten einer Hargasser ECO HK40 Baujahr 2015
# Die daten werden in einer Excel konformen CSV Datei gespeichert
while true; do
  # Der aktuelle Zeitstempel wird in einer Variablen gespeichert
  timestamp=$(date +%d.%m.%Y" "%H:%M)
 
  # 10 Sekunden wird an Telnet gelauscht und in eine Variable geschrieben
  answer=$(timeout 10 nc 192.168.1.25 23)

  # Teste ob Ausgabe etwas enthält
  size=${#answer}

  # Wenn die Antwort mehr als 10 Zeichen lang ist
  if [ $size -gt 10 ]; then
    # Für eine Weitervearbeitung in Excel werden nun Punkte durch Komma ersetzt
    answer=$(echo "$answer" | sed 's/\./,/g')
    
    # Das "pm" am Anfang der Zeile entfernen
    answer=$(echo "$answer" | sed 's/\pm //g')
    
    # Um eine Excel csv Datei zu erstellen werden nun Leerzeichen durch Semikolon ersetzt
    answer=$(echo "$answer" | sed 's/ /;/g')
    
    # Auf 600 Zeichen kürzen
    answer=$(echo "$answer" | sed -r 's/(.{600}).*/\1/;q')
    
    # Erzeuge Log-Zeile, die später an den Anfang der Logdatei kopiert werden soll
    logline="$timestamp;$answer"
    
    # Lies die letzten 9999 Zeilen der Logdatei ein
    history=$(head -n 9999 /home/server/hargassner/hargassner.csv)
    
    # Und schreibe die Logdatei neu (mit logline ganz oben)
    echo "$logline\n$history" > /home/server/hargassner/hargassner.csv
    
    # Aktualisiere im Remote-Verzeichnis
    cp -R /home/server/hargassner /mnt/c/Web/Apache24/htdocs/csvlog
  else
    echo "Hier könnte man loggen, dass etwas schief gegangen ist."
  fi
  # Wiederhole nach 2 Minuten
  sleep 2m
done

Die Ausgabe wird aufgefangen und nur in die Logdatei geschrieben, wenn sie mindestens 10 Zeichen lang ist (diesen Wert muss man halt per Hand einstellen).

Falls es nicht läuft bitte eine genaue Fehlerbeschreibung liefern. Ich bin hier wie gesagt im Blindflug unterwegs.

Gruß Technipion
 

cliodriver

Mitglied
original datenzeile

Code:
pm 1 1.2 7.5 79.6 0 75.5 0 0 0 0 0 0 0 0 15 6 75 0 19 10 140 1000 65.6 58 7.2 3.9 76.0 120 74.2 -20 -20 2 -0 0 0 0 0 3 0 0 0 0 100 2 0 104 50.5 0 100 0 0 13 120 28 -20 26.6 26 24 18 1 1 43.3 45 23.7 12.3 1 1 43.8 46 20 20 1 1 -20 0 20 20 0 1 -20 0 20 20 0 1 -20 0 20 20 0 1 -20 0 20 20 0 1 -20 0 20 20 0 1 21.7 0 77.5 0 -20 0 -20 0 -20 0 0 46 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 67.2 0 93707.5 100 3 3 3 0 1 6 0 0 0 0 0 0 0 0 0 2 0 10 3 0 0 0 46 0 0 49B 1000 7800 0 0 0 0 200
 

cliodriver

Mitglied
getestet

in Zeile 35 musste das "\n" raus. dies wurde vor das Datum geschrieben

dann sehen alle Zeilen korrekt aus, doch Grafana meckert beim auswerten das in Zeile 2 nicht die korrekte Anzahl von Feldern ist. Ich finde aber keinen Fehler

Code:
29.12.2022 20:11;1;1,2;7,5;63,5;0;60,4;0;0;0;0;0;0;0;0;12;3;75;0;20;10;140;1000;54,9;58;0,7;1,0;71,6;120;59,9;-20;-20;0;-0;0;0;0;0;3;0;0;0;0;96;2;0;105;50,5;0;100;0;0;13;120;27;-20;28,7;28;24;18;1;1;44,8;45;23,9;12,1;1;1;49,0;50;20;20;1;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;21,7;0;76,0;0;-20;0;-20;0;-20;0;0;50;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;73,2;0;93779,2;100;3;3;3;0;1;6;0;0;0;0;0;0;0;0;0;2;0;10;3;0;0;0;50;0;0;49B;1000;7800;0;0;0;0;200;
29.12.2022 19:59;1;1,2;7,5;66,6;0;63,2;0;0;0;0;0;0;0;0;13;3;75;0;20;10;140;1000;56,8;58;0,9;1,1;72,3;120;63,3;-20;-20;0;-0;0;0;0;0;3;0;0;0;0;97;2;0;105;50,5;0;100;0;0;13;120;27;-20;28,7;28;24;18;1;1;43,5;45;23,9;12,1;1;1;50,0;50;20;20;1;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;21,7;0;76,2;0;-20;0;-20;0;-20;0;0;50;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;73,2;0;93779,2;100;3;3;3;0;1;6;0;0;0;0;0;0;0;0;0;2;0;10;3;0;0;0;50;0;0;49B;1000;7800;0;0;0;0;200;
29.12.2022 19:57;1;1,2;7,5;66,9;0;64,1;0;0;0;0;0;0;0;0;13;3;75;0;20;10;140;1000;56,2;58;0,9;1,1;72,3;120;63,8;-20;-20;0;-0;0;0;0;0;3;0;0;0;0;97;2;0;105;50,5;0;100;0;0;13;120;27;-20;28,7;28;24;18;1;1;43,5;45;23,9;12,1;1;1;50,0;50;20;20;1;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;21,7;0;76,2;0;-20;0;-20;0;-20;0;0;50;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;73,2;0;93779,2;100;3;3;3;0;1;6;0;0;0;0;0;0;0;0;0;2;0;10;3;0;0;0;50;0;0;49B;1000;7800;0;0;0;0;200;
29.12.2022 19:54;1;1,2;7,5;67,4;0;65,3;0;0;0;0;0;0;0;0;13;3;75;0;20;10;140;1000;50,5;58;1,2;1,4;72,6;120;64,0;-20;-20;0;-0;0;0;0;0;3;0;0;0;0;97;2;0;105;50,5;0;100;0;0;13;120;27;-20;28,7;28;24;18;1;1;43,8;45;23,9;12,1;1;1;50,3;50;20;20;1;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;21,7;0;76,2;0;-20;0;-20;0;-20;0;0;50;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;73,2;0;93779,2;100;3;3;3;0;1;6;0;0;0;0;0;0;0;0;0;2;0;10;3;0;0;0;50;0;0;49B;1000;7A00;0;0;0;0;200;
29.12.2022 19:52;1;1,2;7,5;69,7;0;66,3;0;0;0;0;0;0;0;0;13;3;75;0;20;10;140;1000;66,1;58;1,2;1,4;72,9;120;63,5;-20;-20;0;-0;0;0;0;0;3;0;0;0;0;97;2;0;105;50,5;0;100;0;0;13;120;27;-20;29,0;28;24;18;1;1;43,5;45;23,9;12,1;1;1;50,0;50;20;20;1;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;-20;0;20;20;0;1;21,7;0;76,2;0;-20;0;-20;0;-20;0;0;50;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;73,2;0;93779,2;100;3;3;3;0;1;6;0;0;0;0;0;0;0;0;0;2;0;10;3;0;0;0;50;0;0;49F;1000;7D00;0;0;0;0;200;
 

cliodriver

Mitglied
ich hab jetzt einen Ansatz zum Fehler

das script dürfte die Zeilenumbrüche nicht richtig schreiben, das sagt zumindest Grafana beim einlesen

sobald ich die csv mit excel öffne und speichere funktioniert es wieder
 

cliodriver

Mitglied
Ich gehe jetzt einen anderen Weg

ich mach das jetzt mit php, da hab ich die Daten besser im griff. Ich verwende zwar immer noch die csv-Variante aber einer SQL steht auch nichts mehr im weg.

Noch ein Vorteil, WSL ist komplett aus dem Spiel und das php-script wird per Win-Aufgabenplanung alle 2 Minuten ausgeführt