2016-11-03 45 views
0

我有文本行像這些如下:的Unix - 刪除前/後間隔(逐列)

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 ,, 

我希望他們能象下面這樣:

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,, 

要求:

  1. 從2,6,7列只
  2. 在7列
  3. 值應該由單一的空間保持分開僅

研究卸下所有領先&尾隨空格:

我已經嘗試了許多組合,帶awksed,tr,但根據我的要求無法成功。我想在awksed,tr有一個更好的解決方案,因爲我所有的客戶端都安裝了有限的CYGWIN。所以我不能要求我的所有客戶安裝新的可執行文件。

+0

看到https://stackoverflow.com/editing-help進行格式化,並添加你嘗試,而不是命令只是說,你試過... – Sundeep

+0

我也試過這個解決方案,但它不工作 http://stackoverflow.com/a/28548655/3676305 – user3676305

回答

2

您可以使用此awk

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

易懂的方式:

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

正如評論說@glennjackman,使用更安全

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

說明:

  • FS - 設置輸入分隔符
  • OFS - 設置輸出域
  • $1=$1 - 這將使awkOFS格式化的字段。這返回true這使得awk打印當前行(重新格式化)。
+0

完美無缺地工作! 非常感謝。如果您可以稍微描述一下您的解決方案,那將會很好,這對於進一步的開發將會更有幫助。 – user3676305

+0

它解決了您的問題,@ user3676305?既然你是新來的,如果你的問題已經解決了,請不要忘記標記答案。您可以點擊答案旁邊的複選標記將其從空心切換爲綠色。如果您有任何問題,請參閱[幫助中心>提問](http://stackoverflow.com/helpcenter/someone-answers)! – fedorqui

+0

@ user3676305,已更新的回答。 – sat

1

sed也是不錯的選擇。

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

,我們假定這個CSV文件不包含這樣一行:

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