用“0”替换制表符分隔文件中的空字段

时间:2016-10-14 16:26:00

标签: awk sed

假设我的数据文件包含a^I^I^I^I^I^I^Ib^Ic这样的行,由^I分隔(表示标签)。

现在,我想将每列的空值更改为0,因此结果应该是:a^I0^I0^I0^I0^I0^I0^Ib^Ic

如何只用一个sed命令来实现它?

4 个答案:

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