2017-02-15 3 views
-2

Ich habe einen testfile.txt wie untenwie die Daten in einer Datei in Ordnung zu machen?

/path/  345 firstline 
/path2/  346  second line 
/path3/ 347 third line having spaces 
/path4/ 3456 fourthline 

Jetzt will ich es machen, wie unten

/path/,345,firstline 
/path2/,346,second line 
/path3/,347,third line having spaces 
/path4/,3456,fourthline 

die obige Ausgabe Nach sollten die Daten mit 3 Spalten und alle Spalten mit getrennt ausgebildet werden, commas.There kann ein oder mehr Zwischenräume zwischen den Säulen in dem Eingang file.Example sein,

/path/ und

kann durch 2 Registerkarten auch getrennt werden. Die dritte Spalte enthält die Leerzeichen so wie sie sind.

Kann mir hier jemand weiterhelfen?

Antwort

0

können Sie den sed Befehl verwenden, um dies zu erreichen:

ich das ausprobiert und es funktionierte für mich:

sed 's/[ \t]\+/,/' testfile.txt | sed 's/[ \t]\+/,/' 

Es werden nur die ersten und zweiten Instanzen von Leerzeichen oder Tabs in Ihrer Datei ersetzt.


aktualisieren

sed (Stream-Editor) verwendet Befehle Bearbeitung durchzuführen. Der erste Parameter 's/[ \t]\+/,/' ist der Befehl, der zum Ersetzen eines Ausdrucks durch einen anderen verwendet wird. Splitting diesen Befehl weiter:

Syntax: s/expression1/expression2/

s - substitute 
/- expression separator 
[ \t]\+ - (expression1) this is the expression to find and replace (This regular expression matches one or more space or tab characters) 
, - (expression2) this is what you want to replace the first expression with 

Wenn der obige Befehl ausgeführt wird, auf denen jeweils die erste Instanz des Ausdrucks Linie ersetzt wird. Da das zweite Trennzeichen ebenfalls ersetzt werden muss, übertrage ich die Ausgabe des ersten Befehls sed an einen anderen ähnlichen Befehl. Dies ersetzte den zweiten Begrenzer durch einen ,.


Hoffe, das hilft!

+1

Danke, es funktioniert wie erwartet. –

+0

können Sie auch den Befehl ausführen, wie es funktioniert? –

0
tr -s ' ' <data |sed -e 's/\s/,/' -e 's/\s/,/' 
/path/,345,firstline 
/path2/,346,second line 
/path3/,347,third line having spaces 
/path4/,3456,fourthline 

Nicht der beste Weg, dies zu tun, aber es wird die gewünschte Ausgabe erzeugen.

Verwandte Themen