2016-12-01 2 views
0

Ich verwende diese Befehlszeile ich im Internet fand eine neue Spalte in einer CSV-Datei hinzuzufügen:awk comand zum Einfügen von neuen Spalt in csv

awk '{print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,F,$12,$13,$14,$15,$16}' FS=, OFS=, F='0' file.csv 

Das Problem ist also diese Zeile druckt nur das Ergebnis in Terminal, aber ich möchte die Datei.csv ändern, wäre das möglich? Weiter mehr, wenn ich diese Befehlszeile ausführen die Ausgabe I bekommen, ist dies:

original CSV:

11;ALE;Augsburg;1;Jentzsch;Simon Jentzsch;35;28;28;28;0;2520;1;0;-41;t 
11;ALE;Augsburg;2;Verhaegh;Paul Johannes Gerardus Verhaegh;28;26;26;25;0;2333;3;0;1;t 
11;ALE;Augsburg;18;Callsen-Bracker;Jan-Ingwer Callsen-Bracker;27;30;25;24;5;2310;7;0;4;t 

Terminal-Ausgang:

,,,,,,,,,,,0,,,,,;Jentzsch;Simon Jentzsch;35;28;28;28;0;2520;1;0;-41;t 
,,,,,,,,,,,0,,,,,;Verhaegh;Paul Johannes Gerardus Verhaegh;28;26;26;25;0;2333;3;0;1;t 
,,,,,,,,,,,0,,,,,8;Callsen-Bracker;Jan-Ingwer Callsen-Bracker;27;30;25;24;5;2310;7;0;4;t 

Es ist schwer zu erklären, aber was ich wollte, war etwas wie das:

11;ALE;Augsburg;1;Jentzsch;Simon Jentzsch;35;28;28;28;0;0;2520;1;0;-41;t 
11;ALE;Augsburg;2;Verhaegh;Paul Johannes Gerardus Verhaegh;28;26;26;25;0;0;2333;3;0;1;t 
11;ALE;Augsburg;18;Callsen-Bracker;Jan-Ingwer Callsen-Bracker;27;30;25;24;5;0;2310;7;0;4;t 

Also fügen Sie einfach eine 0 als neue Spalte achtern hinzu er die ursprüngliche 11. Spalte. Vielen Dank im Voraus!

Antwort

2

So etwas wie,

$ awk -F";" -v OFS=";" '$11=$11OFS"0"' file 
11;ALE;Augsburg;1;Jentzsch;Simon Jentzsch;35;28;28;28;0;0;2520;1;0;-41;t 
11;ALE;Augsburg;2;Verhaegh;Paul Johannes Gerardus Verhaegh;28;26;26;25;0;0;2333;3;0;1;t 
11;ALE;Augsburg;18;Callsen-Bracker;Jan-Ingwer Callsen-Bracker;27;30;25;24;5;0;2310;7;0;4;t 

Sie werden nicht in der Lage sein, die Ausgabe in die Datei umgeleitet werden, wie wir aus der gleichen Datei lesen, also können wir es in eine neue Datei und bewegt umleiten die neue Datei als alte Datei.

Beispiel

$ awk -F";" -v OFS=";" '$11=$11OFS"0"' file > new_file && mv new_file file 

bearbeiten

Wenn Sie awk Version 4.1.0 oder höher verwenden, können Sie auch -i Option verwenden.

$ awk -i inplace -F";" -v OFS=";" '$11=$11OFS"0"{print}' file 

, die die Datei an Ort und Stelle bearbeiten wird. Danke @JamesBrown für den Link.

+0

Es ist okey, wenn wir das Ergebnis auf neue Datei umleiten, kann ich – yeker3

+0

, die arbeitete später die alte Version löschen! Wie kann ich es in einer neuen Datei speichern? – yeker3

+0

@JamesBrown verdrahtet. Es funktionierte gut, während ich testete:/ – nu11p01n73R

0
$ echo 'a;b;c;d' | awk '{sub(/([^;]*;){2}/,"&0;")}1' 
a;b;0;c;d 

einfach die 2 bis 11 oder was auch immer verändern ...