在两个字符的实例之间插入一个字符

时间:2014-12-21 21:18:30

标签: regex perl awk sed tr

我有一个csv文件,其中包含以下格式的X行数

P26439,341,P,L,,P26439,,-0.41

每次有双逗号,即,,我想在它们之间插入字NA,以便显示为,NA,

有人会有sed,tr,perl或awk解决方案吗?

我知道我可以通过以下方式使用tr替换字符:

tr ",," ",NA,"

但是这会替换逗号的任何实例。

5 个答案:

答案 0 :(得分:2)

尝试使用执行此操作:

sed 's/,,/,NA,/g' file.csv

一次只能包含一个字符。

如果您想编辑文件,请添加-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
  • 为任何字段设置NA,包括第一个和最后一个。
  • 多个后续出现,,,需要循环,其中只有第一个,,在第一个周期被处理,而第二个(和任何其他两个出现的多个)没有变化

答案 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