2017-09-08 90 views
0

我有一個txt文件,我只需要在引號之間用空格替換逗號。在兩個字符之間替換逗號

例如:

This,is,example,"need,delete comma",xxxx 

而且結果應該是:

This,is,example,"need delete comma",xxxx 

我有這樣的命令,但它是錯誤的:

sed -i '/^"/,/^"/s/.,/ /' output.txt 
+1

我很好奇,爲什麼要替換逗號?你是否想要解決沒有適當的CSV解析器? –

回答

2

試試這個:

AWK「NR%2-1 {GSUB(/,/, 「 」)} 1' RS = \「 ORS = \」 input.txt中> output.txt的

輸入:

這是,例如, 「需要,刪除逗號」,XXXX

輸出:

這是,例如, 「需要刪除逗號」,XXXX

+1

這會在多行輸出結尾添加末尾的'''',你可以從'testfile'的回答中進行測試https://stackoverflow.com/questions/46118785/replace-comma-between-two-characters/46119331 #46119331 – RomanPerekhrest

0

複雜AWK溶液:

testfile樣品:

This,is,example,"need,delete comma",xxxx 
asda 
asd.dasd,asd"sdf,dd","sdf,sdfsdf" 
"some,text,here" another text there"" 

作業:

awk -F'"' '$0~/"/ && NF>1{ for(i=1;i<=NF;i++) { if(!(i%2)) gsub(/,/," ",$i) }}1' OFS='"' testfile 

輸出:

This,is,example,"need delete comma",xxxx 
asda 
asd.dasd,asd"sdf dd","sdf sdfsdf" 
"some text here" another text there"" 
0

下面的awk如何查找「...」之間的匹配,然後簡單地刪除該匹配中的所有逗號。然後用舊的「..」值替換它的新值。

awk '{match($0,/\".*\"/);val=substr($0,RSTART,RLENGTH);gsub(/,/," ",val);gsub(/\".*\"/,val,$0)} 1' Input_file 

EDIT1:在任何一行看到RomanPerekhrest的INPUT_FILE在上面的代碼,這將禁止更改變化不大「」後。

awk '{match($0,/\".*\"/);val=substr($0,RSTART,RLENGTH);gsub(/[^","],/," ",val);gsub(/\".*\"/,val,$0)} 1' Input_file 
0

回聲 '這是,例如, 「需要,刪除逗號」,XXXX' | AWK -F \」「{子(/,/,」」,$ 2);打印}」 OFS = \ 「

這是例如」需要刪除逗號「,xxxx

相關問題