假设我的数据文件包含a^I^I^I^I^I^I^Ib^Ic
这样的行,由^I
分隔(表示标签)。
现在,我想将每列的空值更改为0,因此结果应该是:a^I0^I0^I0^I0^I0^I0^Ib^Ic
。
如何只用一个sed命令来实现它?
答案 0 :(得分:0)
使用支持预测的工具更容易做到:
perl -pe 's/\t(?=\t)/\t0/g' file
这会使" 0"在任何一对制表符之间。前瞻是有用的,因为它匹配第二个选项卡而不消耗它,因此它可以在下一场比赛中使用。
以下是使用awk的方法:
awk -F'\t' -v OFS='\t' '{ for (i = 1; i <= NF; ++i) sub(/^$/, 0, $i) } 1' file
循环遍历所有字段,用0替换所有空字段。
答案 1 :(得分:0)
另一个awk
$ awk -v RS='\t' -v ORS='\t' '$0==""{$0=0}1'
或使用BEGIN块
$ awk 'BEGIN{RS=ORS="\t"} $0==""{$0=0}1'
答案 2 :(得分:0)
使用GNU sed:
sed ':a;s/\t\(\t\|$\)/\t0\1/;ta' file
将所有\t
替换为\t
或替换为\t0
。
答案 3 :(得分:0)
$ awk '{while(gsub(/\t\t/,"\t0\t"));} 1' file
a 0 0 0 0 0 0 b c