±split
Teilt eine Spalte CSV in zwei oder mehr Spalten auf
Dieser Befehl teilt eine Spalte in zwei oder mehr Spalten auf, indem er sie an der gleichen Stelle durch die neuen Spalten ersetzt.
Das Grundprinzip ist einfach:
Die Trennzeichen hinter dem Gleichheitszeichen
Wenn keine Spaltennamen für die Ausgabe verwendet werden (d.h. -colnames wurde auf "false" gesetzt), kann stattdessen die Anzahl der neuen Spalten in runden Klammern angegeben werden. Sie haben dann "leere" Spaltennamen.
Splitting-Modi
Es gibt vier Aufteilungsmodi, und jeder funktioniert von links oder von rechts. Der Aufteilungsmodus wird durch den Befehlsmodus definiert.
Spalten von links nach rechts trennen:
Der Spalteninhalt wird von Anfang bis Ende nach der Trennzeichenfolge durchsucht.split odersplit/s . Die Aufteilung erfolgt beim ersten Vorkommen der Trennzeichenfolge (siehe unten). Der linke Teil wird in die erste Spalte eingefügt, der Rest wird nach rechts verschoben. Die Trennzeichenkette selbst geht dabei verloren.split/l (links geteilt). Dito, aber die Trennzeichenkette wird an die linke Spalte angehängt.split/r (rechts geteilt). Die Trennzeichenfolge wird der rechten Spalte vorangestellt.split/n=n (an Position trennen). Teilt nach dem n-ten Zeichen der Spalte auf (d.h., die linke Spalte hat die Breite n).
Die Spalten werden von rechts nach links getrennt:
Der Spalteninhalt wird rückwärts nach der Trennzeichenfolge vom Ende zum Anfang durchsucht.split/-s Die Aufteilung erfolgt beim letzten Vorkommen der Trennzeichenkette. Der letzte Abschnitt wird in die Spalte ganz rechts eingefügt. Der Rest verbleibt auf der linken Seite. Die Trennzeichenkette selbst geht dabei verloren.split/-l (links aufteilen). Dito, aber die Trennzeichenkette wird an die linke Spalte angehängt.split/-r (rechts aufteilen). Die Trennzeichenfolge wird der rechten Spalte vorangestellt.split/-n=n (an Position trennen). Teilt vor dem n-ten rechten Zeichen der Spalte auf (d.h., die rechte Spaltenbreite ist n).
Das Trennzeichen
Die Trennzeichenfolge wird durch den Befehlsparameter nach dem "=" definiert. Der Inhalt hinter (oder vor) dem Trennzeichen wird in die neue Spalte übertragen. Wenn kein Trennzeichen angegeben wird, wird das " " (Leerzeichen) angenommen.Wenn das Trennzeichen im Spalteninhalt nicht gefunden wird, erhält die erste neue Spalte den gesamten Inhalt und die anderen neuen Spalten bleiben leer.
Wenn der Modus numerisch ist (/n oder /-n), muss hinter dem "=" eine Zahl (oder eine Reihe von Zahlen, siehe unten) stehen. Diese Zahl ist keine Trennzeichenfolge, sondern gibt die Position an, an der geteilt werden soll.
Eine Spalte in zwei Spalten aufteilen
Dies ist sehr einfach. Nennen Sie einfach die vorhandene Spalte, die beiden neuen Spalten und das gewünschte Trennzeichen oder die Position, an der die Spalte geteilt werden soll, und die angegebene Spalte wird durch die beiden neuen ersetzt.Wenn Sie keine Spaltennamen verwenden, können Sie anstelle der Namen nur die Anzahl der neuen Spalten (in runden Klammern) angeben.
Muster
Beispiele für die Verwendung:
Diese kleine Tabelle CSV wird in den folgenden Beispielen verwendet:City | Name | Birth | Driver License |
---|---|---|---|
Rome | Andrea Bocelli | 1958 | y |
Los Angeles | Lieutnant Columbo | 1927 | y |
London | Hercule Poirot | 1910 | - |
New York | Theodoros Kojak | 1922 | y |
Wir werden dazu die Spalte
- csvfox fullnames.csv -split[Name]@[First_Name],[Last_Name] firstlastnames.csv
- Die Trennung erfolgt am ersten Leerzeichen (da dies das Standardtrennzeichen für die Aufteilung ist). Dieses Leerzeichen geht verloren.
Die resultierende Tabelle CSV wird in firstlastnames.csv geschrieben.firstlastnames.csv City First_Name Last_Name Birth Driver License Rome Andrea Bocelli 1958 y Los Angeles Lieutnant Columbo 1927 y London Hercule Poirot 1910 - New York Theodoros Kojak 1922 y - -split/l[Name]@[Left],[Right]=o
- Das Feld
Name wird beim ersten Auftreten des Zeichens "o" in zwei neue Spalten aufgeteilt. Das "o" wird an die linke Spalte angehängt.City Left Right Birth Driver License Rome Andrea Bo celli 1958 y Los Angeles Lieutnant Co lumbo 1927 y London Hercule Po irot 1910 - New York Theo doros Kojak 1922 y - -split/r[Name]@[Left],[Right]=o
- Auch das Feld
Name wird beim ersten Auftreten des Zeichens "o" in zwei neue Spalten aufgeteilt. Das "o" wird der rechten Spalte vorangestellt.City Left Right Birth Driver License Rome Andrea B ocelli 1958 y Los Angeles Lieutnant C olumbo 1927 y London Hercule P oirot 1910 - New York The odoros Kojak 1922 y - -split/n[Name]@[Left\sPart],[Right\sPart]=5
- Das Feld
Name wird nach dem fünften Zeichen getrennt (d.h. die erste Spalte ist 5 Zeichen breit). Die neuen Spaltennamen lauten "Left Part" und "Right Part".
Tipp: Für das "\s" als Platzhalter für Leerzeichen siehe hier: Zeichen-Escaping und Platzhalter.
Der Platzhalter kann für die Verwendung in der Befehlszeile erforderlich sein, aber nicht innerhalb einer %job, %j Datei. Sie können dort ein einfaches Leerzeichen verwenden.City Left Part Right Part Birth Driver License Rome Andre a Bocelli 1958 y Los Angeles Lieut nant Columbo 1927 y London Hercu le Poirot 1910 - New York Theod oros Kojak 1922 y - -split/-n[Name]@[Left],[Right]=5
- Ein negatives "n" bedeutet, dass die Position vom rechten Ende aus gezählt wird: Die rechte Spalte wird aus den letzten fünf Zeichen der Spalte
Name bestehen, die linke Spalte erhält den (linken) Rest.City Left Right Birth Driver License Rome Andrea Bo celli 1958 y Los Angeles Lieutnant Co lumbo 1927 y London Hercule P oirot 1910 - New York Theodoros Kojak 1922 y
Aufteilung einer Spalte in mehr als zwei neue Spalten
Beschreibung
Dies funktioniert genau wie zuvor. Sie geben einfach noch mehr neue Spaltennamen an!
Da hier jedoch mehr Aufteilungen stattfinden, gibt es die Möglichkeit, jedes Aufteilungsereignis anders zu behandeln (siehe unten).
Muster
Beispiele für die Verwendung:
Hier ist eine Produkttabelle "products.csv", die einen unschönen Kategoriepfad enthält, der für die weitere Verarbeitung in einzelne Kategoriespalten aufgeteilt werden muss.
Name | ProductID | Category Path | Price |
---|---|---|---|
Green Fashion Jacket | JACKET1 | Women : Outdoor : Jackets : Transitional | 220 $ |
Black Rain Coat | RAINCOAT1 | Women : Outdoor : Coats : Rain | 200 $ |
Rubber Flubber Rainboots | W4589356 | Women : Shoes : Boots | 100 $ |
Dragon Style Men's Blue Jeans | J4534656 | Men : Trousers : Jeans : Stonewashed : Used | 100 $ |
Also los geht's! CSVfox muss automatisch fünf neue Kategorieebenen für uns generieren.
Die erste soll "Gender" heißen, dann müssen vier Unterebenen mit den Namen "Level2" bis "Level5" folgen.
Tipp: Wenn Sie den Bindestrich "-" anstelle einer kommagetrennten Liste der gewünschten Spaltennamen verwenden, kann der Befehl ±split automatisch einfache Zahlen- oder Buchstabenfolgen generieren. Wir verwenden diese Funktion für die "Level" Nummerierung.
-split[Category\sPath]@[Gender],[Level2]-[Level5]=\s:\s
Dies ist das Ergebnis:
Name | ProductID | Gender | Level2 | Level3 | Level4 | Level5 | Price |
---|---|---|---|---|---|---|---|
Green Fashion Jacket | JACKET1 | Women | Outdoor | Jackets | Transitional | 220 $ | |
Black Rain Coat | RAINCOAT1 | Women | Outdoor | Coats | Rain | 200 $ | |
Rubber Flubber Rainboots | W4589356 | Women | Shoes | Boots | 100 $ | ||
Dragon Style Men's Blue Jeans | J4534656 | Men | Trousers | Jeans | Stonewashed | Used | 100 $ |
Jedes "\s" steht für ein einzelnes Whitespace als Teil des Trennzeichens.
Sie können die Leerzeichen in der Trennzeichenfolge weglassen und stattdessen nur den Doppelpunkt als Trennzeichen definieren, aber dann sollte der Inhalt aller neuen Spalten anschließend mit ±trim gekürzt werden. Außerdem könnte ein einzelner eingebetteter Doppelpunkt als Kategorietrennzeichen missverstanden werden.
Und das passiert, wenn der Modus "-s" (von rechts nach links) verwendet wird:
-split/-s[Category\sPath]@[Gender],[Level2]-[Level5]=\s:\s
Name | ProductID | Gender | Level2 | Level3 | Level4 | Level5 | Price |
---|---|---|---|---|---|---|---|
Green Fashion Jacket | JACKET1 | Women | Outdoor | Jackets | Transitional | 220 $ | |
Black Rain Coat | RAINCOAT1 | Women | Outdoor | Coats | Rain | 200 $ | |
Rubber Flubber Rainboots | W4589356 | Women | Shoes | Boots | 100 $ | ||
Dragon Style Men's Blue Jeans | J4534656 | Men | Trousers | Jeans | Stonewashed | Used | 100 $ |
Dies kann nützlich sein, wenn die Hierarchie von rechts nach links geordnet ist und nicht von links nach rechts wie im obigen Beispiel.
Wenn der Inhalt von "Gender" dennoch immer in die erste neue Spalte eingefügt werden soll, ist ein zweistufiger Ansatz erforderlich:
-split/s[Category\sPath]@[Gender],[Levels]=\s:\s
-split/-s[Levels]@[Level2]-[Level5]=\s:\s
Name | ProductID | Gender | Level2 | Level3 | Level4 | Level5 | Price |
---|---|---|---|---|---|---|---|
Green Fashion Jacket | JACKET1 | Women | Outdoor | Jackets | Transitional | 220 $ | |
Black Rain Coat | RAINCOAT1 | Women | Outdoor | Coats | Rain | 200 $ | |
Rubber Flubber Rainboots | W4589356 | Women | Shoes | Boots | 100 $ | ||
Dragon Style Men's Blue Jeans | J4534656 | Men | Trousers | Jeans | Stonewashed | Used | 100 $ |
Mehr Trennzeichen für mehr Felder verwenden
Sie können optional eine Reihe von Trennzeichenketten definieren, eine für jede neue Spalte. In diesem Fall muss die Anzahl der Trennzeichen genau der Anzahl der neuen Spalten minus 1 entsprechen, da jedes Trennzeichen zum Trennen eines neuen Feldes verwendet wird. Diese Trennzeichen müssen durch ein Komma verkettet werden
Bei der Aufteilung nach numerischen Positionen können Sie die relativen Positionen (d.h. die Länge) als Trennzeichenparameter verwenden:
Wenn das Komma selbst als Trennzeichen angegeben werden muss und es das einzige Trennzeichen ist, schreiben Sie einfach
Wenn das Komma jedoch stattdessen Teil einer Trennzeichenfolge oder in der Trennzeichenliste enthalten ist, muss es aus Gründen der Übersichtlichkeit mit einem Escapezeichen versehen werden:
Stellen Sie sich eine To-Do-Liste vor, deren Schritte getrennt werden sollen. Allerdings wird es nie mehr als sechs Schritte geben (aufgrund der Größe dieses Beispiels).
Name | To-Do |
---|---|
Call | 1. call him 2. ask for his name 3. write down the name 4. forget the name |
Write | 1. write a letter 2. wait for the answer |
Visit | 1. Go there 2. ring the door bell 3. wait for the door being opened4. say "Good morning!" 5. enter 6. drink coffee |
Jetzt werden wir die Schritte aufteilen. Wir suchen nach den Trennzeichen, die bei jedem Schritt anders sind. Wir wollen sie nicht behalten, aber wir müssen sie trotzdem als Trennzeichen auflisten.
-split/s[To-Do]@[Step1]-[Step6]=2.\s,3.\s,4.\s,5.\s,6.\s
Name | Step1 | Step2 | Step3 | Step4 | Step5 | Step6 |
---|---|---|---|---|---|---|
Call | 1. call him | ask for his name | write down the name | forget the name | ||
Write | 1. write a letter | wait for the answer | ||||
Visit | 1. Go there | ring the door bell | wait for the door being opened | say "Good morning!" | enter | drink coffee |
Sie sehen, dass wir das erste Trennzeichen auf diese Weise nicht losgeworden sind. Ein weiterer Befehl ist erforderlich, um das "1. " vom Anfang der Spalte "Step1" zu entfernen.
Zum Schluss noch ein Beispiel, wie Sie die numerische Aufteilung in mehr als zwei Spalten verwenden können.
Wir haben einige Schlüssel mit alphanumerischen Codes, die 15 Ziffern lang sind, und möchten sie in Spalten mit fünf, sechs und vier Ziffern aufteilen.
Key | Code |
---|---|
Alpha | 1KGVDEBI6KGGA6Z |
Beta | KJGTUJ75HTDH87N |
Gamma | KJHT654FNJ7FVPL |
Delta | JZVV4390JGRDGBK |
So können wir die Spalte "Code" aufteilen
(der verbleibende Teil nach der Aufteilung an Stelle 5 und dann an Stelle 6 wird in die dritte Spalte "Code3" übernommen):
-split/n[Code]@[Code1],[Code2],[Code3]=5,6
Key | Code1 | Code2 | Code3 |
---|---|---|---|
Alpha | 1KGVD | EBI6KG | GA6Z |
Beta | KJGTU | J75HTD | H87N |
Gamma | KJHT6 | 54FNJ7 | FVPL |
Delta | JZVV4 | 390JGR | DGBK |
Aber wenn die csv-Datei bereits mit runden Klammern vorbereitet wurde, etwa so:
Key | Code |
---|---|
Alpha | 1KGVD(EBI6KG)GA6Z |
Beta | KJGTU(J75HTD)H87N |
Gamma | KJHT6(54FNJ7)FVPL |
Delta | JZVV4(390JGR)DGBK |
So würden wir stattdessen die Spalte "Code" aufteilen und dabei die Klammern verwenden:
-split[Code]@[Code1],[Code2],[Code3]=\(,\)
Key | Code1 | Code2 | Code3 |
---|---|---|---|
Alpha | 1KGVD | EBI6KG | GA6Z |
Beta | KJGTU | J75HTD | H87N |
Gamma | KJHT6 | 54FNJ7 | FVPL |
Delta | JZVV4 | 390JGR | DGBK |
Vergessen Sie nur nicht, alle Klammern und "Sonder"-Zeichen zu entwerten (siehe Platzhalter).
Beibehaltung der ursprünglichen Spalte
Wenn Sie die ursprüngliche Spalte zusammen mit den neuen Spalten beibehalten möchten, sollten Sie sie vor der Aufteilung duplizieren.
Auf diese Weise behält die Spalte