2016-11-03 3 views
0

Ich habe Textzeilen wie diese unter:Unix - Entfernen Sie Vorder-/Hinter Spaces (Spalte Wise)

P, 123456 ,01,A,H, 123456 ,123456 123456 ,, 
P,123456 ,01,A,H, 123456, 123456 123456,, 
P, 123456,01,A,H,123456 ,123456 123456 ,, 
P, 123456,01,A,H, 123456, 123456 123456,, 
P,123456 ,01,A,H,123456 ,123456 123456 ,, 

Ich möchte, dass sie wie unten sein:

P,123456,01,A,H,123456,123456 123456,, 
P,123456,01,A,H,123456,123456 123456,, 
P,123456,01,A,H,123456,123456 123456,, 
P,123456,01,A,H,123456,123456 123456,, 
P,123456,01,A,H,123456,123456 123456,, 

Anforderungen :

  1. Entfernen Sie alle führenden & Leerzeichen am Ende von 2,6,7 Spalte nur
  2. Werte in der 7. Spalte sollte durch Leerzeichen
  3. nur

Forschung getrennt bleiben:

ich viele Kombinationen mit awk versucht haben, , sed, tr konnte aber nach meinen Anforderungen nicht gelingen. Ich hätte gerne eine bevorzugte Lösung in awk, sed, tr nur, weil alle meine Kunden CYGWIN begrenzt installiert haben. Daher kann ich nicht alle meine Kunden bitten, eine neue ausführbare Datei zu installieren.

+0

https://stackoverflow.com/editing-help sehen für die Formatierung und fügen Sie die Befehle, die Sie versuchten, statt nur zu sagen, dass Sie versucht haben ... – Sundeep

+0

Ich habe auch versucht, diese Lösung, aber es funktioniert nicht http://stackoverflow.com/a/28548655/3676305 – user3676305

Antwort

2

können Sie verwenden diese awk:

awk -F' *, *' '$1=$1' OFS=, file 

Verständlich Weg:

awk 'BEGIN{FS=" *, *"; OFS=","} $1=$1' file 

Wie @glennjackman kommentierte sicherer

awk 'BEGIN{FS=" *, *"; OFS=","} {$1=$1; print}' file 

Erklärung zu verwenden:

  • FS - Set Eingabefeld Separator
  • OFS - Set Ausgabefeldtrenn
  • $1=$1 - Dieses awk machen die Felder mit OFS zu formatieren. Dies gibt true zurück, was awk zum Drucken der aktuellen Zeile (umformatiert) macht.
+0

arbeitete einwandfrei !!! Vielen Dank. Es wäre schön, wenn Sie Ihre Lösung ein wenig beschreiben könnten, was für weitere Entwicklungen hilfreich wäre. – user3676305

+0

Hat es Ihr Problem gelöst, @ user3676305?Da Sie neu hier sind, vergessen Sie bitte nicht, die Antwort zu akzeptieren, wenn Ihr Problem bereits gelöst ist. Sie können es tun, indem Sie auf das Häkchen neben der Antwort klicken, um es von leer auf grün umzuschalten. Siehe [Hilfe-Center> Fragen] (http://stackoverflow.com/helpcenter/someone-answers), wenn Sie Fragen haben! – fedorqui

+0

@ user3676305, aktualisierte Antwort. – sat

1

sed ist auch eine gute Wahl.

sed 's/ *, */,/g' file 

Wir nehmen an dieser CSV-Datei nicht eine Zeile wie diese enthält:

a, b, "this field, this very one, should not be touched", d