2012-06-27 114 views
1

我有一個CSV文件,其中每個列包含不必要的空格(或製表符)後的實際值。我想創建一個新的CSV文件,使用bash刪除所有空格。從bash中的CSV文件的列中刪除空格

例如

在輸入CSV文件

一行

abc def pqr    ;valueXYZ    ;value PQR    ;value4 
在輸出csv文件

同一行應該是

abc def pqr;valueXYZ;value PQR;value4 

我試圖使用AWK削減各列,但它沒有工作。任何人都可以幫助我嗎?

感謝提前:)

我編輯我的測試情況下,由於這裏的值可以包含空格。

+0

對不起,在這個問題加起來, 此處的值可以包含空格也(對於離一個值1可以「等等等等等等」)。但我想維護這些空間,我只是想刪除兩個值之間的空格。 –

+1

然後你需要提供更準確的測試輸入。 – Thor

回答

2
$ cat cvs_file | awk 'BEGIN{ FS=" *;"; OFS=";" } {$1=$1; print $0}' 
  1. 設置輸入字段分隔符(FS)至零個或多個空格,隨後分號正則表達式。
  2. 將輸出字段分隔符(OFS)設置爲簡單分號。
  3. $1=$1有必要刷新$0
  4. 打印$0

$ cat cvs_file 
abc def pqr    ;valueXYZ    ;value PQR    ;value4 

$ cat cvs_file | awk 'BEGIN{ FS=" *;"; OFS=";" } {$1=$1; print $0}' 
abc def pqr;valueXYZ;value PQR;value4 
+0

非常感謝你爲這一個@vergenzt!這照顧了所有的情況:) –

2

如果值本身都是免費的空間,將典型的解決方案(在我看來)是使用tr

$ tr -d '[:blank:]' <CSV_FILE> CSV_FILE_TRIMMED 
+0

哇!這工作!非常感謝你:) –

0

這將只是一個空格代替多個空格:

sed -r 's/\s+/ /g' 
0

如果你知道你的列數據將結束在什麼,那麼這是一個正確的方式做到這一點:

sed 's|\(.*[a-zA-Z0-9]\) *|\1|g'

的字符類是,你把你的任何數據將結束。

否則,如果你知道一個以上的空間是不會進來的領域,那麼你可以使用什麼user1464130給你。

如果這不能解決您的問題,那就回到我身邊。