1

我目前正在处理一个处理 csv 文件的脚本,并且我正在尝试使脚本用字符串“data_n/a”替换 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
4

4 回答 4

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
于 2012-12-01T06:52:14.457 回答
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
于 2012-12-01T04:50:22.077 回答
0

^ 表示行首,$ 表示行尾

sed "s/,,/data_n\/a,/g;s/^,/data_n\/a,/;s/,$/,data_n\/a/" file >outfile
于 2012-12-01T07:07:44.553 回答
0

这可能对您有用(GNU sed):

sed -r ':a;s/(^,)|(,)(,)|(,)$/\2\4data_n\/a\1\3/g;ta' file
于 2012-12-01T08:54:31.470 回答