2012-12-01 28 views
1

我目前正在處理csv文件的腳本,並且正在嘗試使腳本替換csv文件中的所有空白字段,一個字符串「data_n/a」。起初我還以爲我可以簡單地使用以下方法來完成這項任務:如何使用sed替換csv文件中的空白字段,並使用字符串

sed -e "s/hi/data_n\/a/g" 

但不幸的是這將離開了那些可能出現在開頭或CSV文件的行結束任何空字段。我不知道該如何解決這個問題,所以我想知道是否有人能夠幫助我朝正確的方向發展,或爲我應該做什麼提供建議?謝謝!

也在這裏是CSV文件的樣本:

,,6004,,,15:00.00,30004,Colleen,2010-02-10 
2,Closed,6005,,,30:00.00,30005,Rich,2010-02-11 
7,Closed,6001,,,30:00.00,10001,Mary Beth,2010-02-11 

回答

3

使用perl的正則表達式,

perl -pe 's;^,|,$|(?<=,),;data_n\/a,;g' input.cvs 

使用sed的

$ sed -r 's;^,|,$;data_n\/a,;g 
:l 
s;,,;,data_n\/a,;g 
t l' input.cvs 
+0

這並不取代最後一個字段,例如 – adamF

2

如果AWK是一種選擇,你可以嘗試以下方法:

awk -F, '{for(i=1;i<=NF;++i){if($i==""){printf "data_n/a"}else{printf $i} if(i<NF)printf ","} printf "\n"}' infile 
+0

雖然我有最後用sed回答,你發佈的awk解決方案也工作得很好,謝謝! – lacrosse1991

0

的^指示線的起點和$是行尾

sed "s/,,/data_n\/a,/g;s/^,/data_n\/a,/;s/,$/,data_n\/a/" file >outfile 
0

這可能會爲你工作(GNU SED):

sed -r ':a;s/(^,)|(,)(,)|(,)$/\2\4data_n\/a\1\3/g;ta' file 
相關問題