我有一个csv文件,其中包含以下格式的X行数
P26439,341,P,L,,P26439,,-0.41
每次有双逗号,即,,
我想在它们之间插入字NA,以便显示为,NA,
有人会有sed,tr,perl或awk解决方案吗?
我知道我可以通过以下方式使用tr替换字符:
tr ",," ",NA,"
但是这会替换逗号的任何实例。
答案 0 :(得分:2)
尝试使用sed执行此操作:
sed 's/,,/,NA,/g' file.csv
tr一次只能包含一个字符。
如果您想编辑文件,请添加-i
开关:
sed -i.bak 's/,,/,NA,/g' file.csv
答案 1 :(得分:2)
如果您有连续缺失字段的可能性,则需要执行以下操作:
$ cat file
P26439,341,P,L,,P26439,,-0.41
P26439,341,P,L,,,P26439,,-0.41
P26439,341,P,L,,,,P26439,,-0.41
$ sed ':a;s/,,/,NA,/;ta' file
P26439,341,P,L,NA,P26439,NA,-0.41
P26439,341,P,L,NA,NA,P26439,NA,-0.41
P26439,341,P,L,NA,NA,NA,P26439,NA,-0.41
答案 2 :(得分:1)
Perl解决方案:
$ echo "P26439,341,P,L,,P26439,,-0.41" | perl -pe 's/,,/,NA,/g'
P26439,341,P,L,NA,P26439,NA,-0.41
答案 3 :(得分:0)
sed ':cycle
s/,,/,NA/g;t cycle
s/^,/NA,/;s/,$/,NA/' YourFile
,,,
需要循环,其中只有第一个,,
在第一个周期被处理,而第二个(和任何其他两个出现的多个)没有变化答案 4 :(得分:0)
通过awk
:
awk -F',' '{for (i=1;i<=NF;i++) if ($i=="") $i="NA" }1' OFS=',' file
NA
字符串替换第一个,中间,最后一个或者多次出现的每个空字段。,P26439,341,P,L,,P26439,,-0.41
P26439,341,P,L,,P26439,,-0.41
P26439,341,P,L,,P26439,,-0.41,
P26439,341,P,L,,,,P26439,,-0.41
NA,P26439,341,P,L,NA,P26439,NA,-0.41
P26439,341,P,L,NA,P26439,NA,-0.41
P26439,341,P,L,NA,P26439,NA,-0.41,NA
P26439,341,P,L,NA,NA,NA,P26439,NA,-0.41