staging.inyokaproject.org

CSV - Zeile1-Spalten umbennenen und Spalten neu Sortieren

Status: Gelöst | Ubuntu-Version: Server 22.10 (Kinetic Kudu)
Antworten |

rurotil

Anmeldungsdatum:
7. April 2009

Beiträge: Zähle...

Hallo Zusammen,

wie kann ich mit sed und awk diese CSV Datei so gestalten, dass ich die Überschrift in Zeile 1 umbennen kann und gleichzeitig Spalte 5 zu Spalte 6 machen, Spalte 1 zu Spalte 10 und Spalte 2 löschen.

ID;Reference;EAN;Hersteller;Price_B2B;Price_B2B_Angebot;Price_B2B_Prozent;Price_B2B_Discount;Price_B2C_ohneSteuer;Price_B2C_mitSteuer;STEUERSATZ;LAND;Währung;PREIS
111;111;;TEST;1,5;1,5;0;0;;2;19;DE;EUR;1,8
222;222;;TEST;8,29;5,5;0;0;10,08;12;19;DE;EUR;10,8
333;333;;TEST;1,45;1,45;0;0;1,69;2,01;19;DE;EUR;1,69

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

So wäre ein erster Ansatz. Mit dem Umbennen der Überschrift habe ich nicht ganz verstanden:

awk -F';' 'BEGIN {print "Neue Kopfzeile"} ; NR>1 {print $10";"$3";"$4";"$6";"$5";"$7";"$8";"$9";"$1";"$11""}' test.csv 

rurotil

(Themenstarter)

Anmeldungsdatum:
7. April 2009

Beiträge: Zähle...

Danke erstmal ☺ mit dem Umbennen meinte ich Spalte für Spalte

aus

ID;Reference;EAN;Hersteller;Price_B2B;Price_B2B_Angebot;

soll werden

ID Nummer;Nummer;Hersteller Nummer;Hersteller;Price;Price_Angebot;

rurotil

(Themenstarter)

Anmeldungsdatum:
7. April 2009

Beiträge: Zähle...

Doc_Symbiosis schrieb:

So wäre ein erster Ansatz. Mit dem Umbennen der Überschrift habe ich nicht ganz verstanden:

awk -F';' 'BEGIN {print "Neue Kopfzeile"} ; NR>1 {print $10";"$3";"$4";"$6";"$5";"$7";"$8";"$9";"$1";"$11""}' test.csv 

Heißt das Spalte 10 wird zu 3 und Spalte 4 wird zu 6?

oder

Wir hier Spalte 1 zu 10 und Spalte 2 zu 3?

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Naja, die Spalten kommen jetzt einfach in der Reihenfolge, wie ich sie gelistet habe. Da sollte das Ergebnis so rauskommen, wie Du es beschrieben hattest, denke ich.

Probier es doch einfach aus, ob das Ergebnis so mit dem übereinstimmt, was Dir vorschwebte.

rurotil

(Themenstarter)

Anmeldungsdatum:
7. April 2009

Beiträge: 102

Ja danke, das Sortieren scheint zu funktionieren. Allerdings steht nun in der 1. Zeile nur Kopfzeile.

Da müsste man jetzt Spalte für Spalte umbennen, wir ich vorher das Beispiel geschiltert habe.

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Naja, schreibe da doch einfach die neue Kopfzeile rein wie sie sein soll.

rurotil

(Themenstarter)

Anmeldungsdatum:
7. April 2009

Beiträge: 102

Dann habe ich aber nur eine Überschrift, ich möchte ja Überschrift1 und Überschrift2 umbennenen, usw.

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Na, also schreibe doch die gesamte Kopfzeile in die BEGIN Anweisung. Ich weiß nicht, was man da großartig programmieren sollte.

rurotil

(Themenstarter)

Anmeldungsdatum:
7. April 2009

Beiträge: 102

Achso, sorry das hatte ich nicht verstanden. Hat jetzt funktioniert, vielen Dank ☺

Die Zeilen 2-x haben als Trennung ", das bekomme ich in der ersten Zeile nicht hin.

So gehts mal nicht:

awk -F';' 'BEGIN {print '"111";"222";"222";"333";"444";"555";"666"'} ; NR>1 {print $10";"$3";"$4";"$6";"$5";"$7";"$8";"$9";"$1";"$11""}' 2022-07_Cloud.csv > neu.csv

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Na, Du musst auf das Quoting aufpassen (single Quotes solltest Du innerhalb der Statements nicht verwenden und die Semikolons müssen aber innerhalb der Quotes sein):

awk -F';' 'BEGIN {print "111;222;222;333;444;555;666"} ; NR>1 {print $10";"$3";"$4";"$6";"$5";"$7";"$8";"$9";"$1";"$11""}' 2022-07_Cloud.csv > neu.csv

rurotil

(Themenstarter)

Anmeldungsdatum:
7. April 2009

Beiträge: 102

So ist das Ergebnis aber so

111;222;222;333;444;555;666
"70111";"Name";"10122";"B2000056";"20.06.2017 10:35:39";"Business";"Office"

In der ersten Zeile fehlt nun " pro Spalte.

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Achso, Du willst Double-Quotes drin haben, davon stand in deinem Beispiel nichts.

Dann halt so:

print "\"111\";\"222\";\"222\";\"333\";\"444\";\"555\";\"666\""

rurotil

(Themenstarter)

Anmeldungsdatum:
7. April 2009

Beiträge: 102

Ja danke, das war die Lösung, nun funktioniert alles so wie ich es wollte. vielen Dank nochmals

rurotil

(Themenstarter)

Anmeldungsdatum:
7. April 2009

Beiträge: 102

Hallo Leute,

erstmal danke für die Hilfe.

Aber geht es auch einfacher wie:

awk -F';' 'BEGIN {print "\"111\";\"222\";\"222\";\"333\";\"444\";\"555\";\"666\""} ; NR>1 {print $10";"$3";"$4";"$6";"$5";"$7";"$8";"$9";"$1";"$11""}' test.csv 

Ich würde gerne die Überschriften usw. einfach nur reinkopieren oder einfach Spalte1,Spalte2,Spalt3 usw. ohne " schreiben.

Antworten |