2015-08-26 42 views
0

我一個CSV文件的工作像這樣SED,AWK正則表達式替換字符串

"EF", "12345", "Test, String", "Xyz",我需要輸出

"EF", "12345", "Test$$$ String", "Xyz" 

基本上我需要$$$

更換逗號
+0

什麼。 Have.You.Try? –

+0

Iam根據特定列對大型CSV文件(〜4GB)進行排序。 CSV文件是逗號分隔的。我打算使用unix'sort',它的速度更快,但是我有一些包含行值的逗號(,)的行。如何在列數增加的情況下排序(,)用作分隔符。 例如: 這裏我想根據2和第4列進行排序,但是如果我使用(,)作爲分隔符,我將在第1行和4列第2行中總共得到5列,這將破壞排序。 「wert」,「DGC」,「Xyt,temp」,「3456」 「wert」,「ABC」,「ppp」,「1234」 – jsphdnl

+0

從您的數據處理中消除了一整類問題並開始導出以'|'字符作爲分隔符的數據。祝你好運。 – shellter

回答

2

你可以嘗試這樣的事情:

, ([^"])

並將代替:

$$$ $1

Regex live here.


甚至這樣的:

([^"]),

而且通過更換:

$1$$$

Regex live here.

+3

我的sed和awk不支持lookahead/behind。你的呢? – Kent

+0

生活和學習..謝謝 –

+0

@shellter。我已經更新..你見過嗎? –

3

您可以使用GNU的awk的這個:

awk 'BEGIN{OFS=", "; FPAT="\"[^\"]+\""} {sub(/,/, "$$$", $3)} 1' file 
"EF", "12345", "Test$$$ String", "Xyz" 
0
sed ':a 
    s/^\(\([[:blank:]]*"[^"]*",\)*[[:blank:]]*"[^",]*\),/\1\$\$\$/ 
    t a 
    ' YourFile 
  • POSIX版本
  • 使用遞歸的;內通過"分隔字符串中刪除(所以不最快)
  • 假設有n o逃脫"內部字符串(如果是這種情況,需要適應一下)
0

它也適用於sub。
的awk '{子(/測試,/, 「測試$$$」)} 1' 文件
「EF」, 「12345」, 「測試$$$字符串」, 「XYZ」