Spezifische Zeile in einer CSV-Datei bearbeiten?
Hallo liebe Community,
ich stehe vor folgendem Problem...
Ich habe unter Linux (CentOS Core) eine CSV welche ich über ein Skript mit Daten befüllen möchte. Ich habe mir also gedacht über eine Schleife, Zeile für Zeile, abzuarbeiten. Jedoch habe ich nicht herausgefunden wie ich genau eine spezifische Zeile in der CSV anspreche.
Das Skript wird in der Bash geschrieben.
Hier ein Beispiel:
--------------------------------
Auto
Flugzeug
Schiff
--------------------------------
nach dem das Skript lief:
--------------------------------
Auto, 1024
Flugzeug, 516
Schiff, 136
--------------------------------
Es sollen bei jedem Skriptdurchlauf Werte angehangen werden.
3 Antworten
Bei solchen Aufgaben hilft der Stream Editor. Am Beispiel ›Flugzeug‹:
Wenn in einer Datei ›Liste.csv‹ die Zeile ›Flugzeug‹ steht, dann lässt diese sich über den folgenden Befehl ändern:
sed -i '/Flugzeug/cFlugzeug, 516' Liste.csv
In der Datei ›Liste.csv‹ steht anschließend die Zeile ›Flugzeug, 516‹. Den Rest bekommst du selbst hin.
Das ideale Mittel für CSVs ist nicht ein Script in Bash, sondern in AWK. Da ist das deutlich kompakter und einfacher.
Aber ansonsten: Textdatei Zeile für Zeile lesen, in eine neue Textdatei die Zeile mit dem Anhang schreiben, erste Datei löschen, zweite Datei zur ersten umbenennen.
Ich arbeite mit C++, das müsste mit dem "Shell-Script" doch auch gehen, ich würde mir einen Substring von jeder Zeile greifen und prüfen ob darin "Auto" oder "Auto," steht, dann würde ich den String entsprechend an der analysierten Stelle erweitern und Satz für Satz in eine neue Datei csv Datei ausgeben, nach dem alles erledigt ist würde ich die neue Datei anstelle der alten Datei kopieren.
Das würde nicht funktionieren... Ich habe über 70 Werte, welche ich nicht alle manuell eintragen möchte. Es sollte schon so sein, daß es explizit nach Zeilen geht.