2016-12-26 95 views
0

我正在使用bash腳本爲AdWords創建報告(AdWords文件位於python中)。我生成了一個「CAMPAIGN_PERFORMANCE_REPORT」(作爲CSV文件),我採取的措施之一是「轉化」。 。 我的問題是這樣的 - 當我有更多然後千次轉換,數與「在每一側和逗號 示例:從Bash腳本中的CSV文件中刪除括號

2016-12-25,Campaign_A,Universal App Campaign,264.0 
2016-12-25,Campaign_B,Universal App Campaign,"1,535.0" 
2016-12-25,Campaign_C,Universal App Campaign,"1,472.0" 
2016-12-25,Campaign_D,Universal App Campaign,"1,378.0" 
2016-12-25,Campaign_E,Universal App Campaign,382.0 
2016-12-25,Campaign_F,Universal App Campaign,431.0 

當我插入這個數據到MySQL所述細胞在2分割並我得到「1」的轉換,而非1535(例如)

所以我需要你的幫助,在這兩個問題之一:

  1. 有誰知道我怎樣才能把「轉換」字段儘可能長,而不是AdWords API的雙倍數量?
  2. 如果不是,我該如何在Linux中的同一文件夾中的幾個文件中替換括號(「)和逗號(,)?由於每個AdWords帳戶都有一個csv文件...

謝謝!

+2

粘貼您的樣本數據的預期輸出。 – Inian

+0

也許你可能會考慮改變你用來將數據加載到mysql而不是改變文件的方法。 – symcbean

回答

1

這太長了評論。

如果你正在加載數據到MySQL,那麼你應該使用load data infile

此命令有一個選項:fields optionally enclosed by,您可以在其中指定雙引號字符。這會將分隔符之間的逗號視爲值的一部分,而不是值分隔符。

您可以查看文檔here

+0

非常感謝,但它不起作用...我的SQL字段是INT,並且當我添加「ENCLOSED BY'」'「時,SQL將該字段視爲字符串(1,535),並將值這個表是1 ... – Bramat

+1

@Bramat ...我將它作爲一個字符串導入,然後在SQL中進行操作,也可以在'load data infile'中使用變量和轉換 –

+0

tmp表修復了我所有的問題... 非常感謝 :) – Bramat

0

您可以通過SED過濾器這樣的運行文件:

sed -r ':l s/"([0-9]+),/"\1/g; t l; s/"([0-9.]+)"$/\1/g' yourfile > convertedfile 

它採用兩步法擺脫逗號和報價:

  1. 只要有報價([0-9.]+),然後,刪除逗號::l s/"([0-9]+),/"\1/g; t l;(這是一個「標籤;刪除逗號;如果刪除了goto標籤」 - 構造)
  2. 刪除數字周圍的引號([0-9.]+)($