Substituindo o espaço em branco do valor ausente por zero

10

Eu tenho o arquivo de texto delimitado por tabs input.txt em torno de 30K linhas, gostaria de verificar cada linha (s1..s30K linhas) para o valor ausente (ou seja, espaço em branco) e preencher o valor ausente com valor zero.Ver .txt

input.txt

 id  no1  no2  no3  no4
 s1  23   34   45   12
 s2       4    4      
 s3  4         8    0

out.txt

id  no1  no2  no3  no4
s1  23   34   45   12
s2  0     4    4    0  
s3  4     0    8    0
    
por jack 31.10.2012 / 17:49

2 respostas

10

Você poderia fazer assim com o awk:

awk 'BEGIN { FS = OFS = "\t" } { for(i=1; i<=NF; i++) if($i ~ /^ *$/) $i = 0 }; 1' file

Explicação

A configuração de FS e OFS para a guia garante que a saída seja delimitada corretamente. O loop for examina cada campo e o define como zero se estiver vazio. Aquele no final é uma abreviação de { print $0 } .

    
por 31.10.2012 / 18:01
5

Eu preferiria:

sed 's/<TAB> /<TAB>0/g' <input.txt >output.txt

Substitua <TAB> pelo caractere TAB real (geralmente obtido pressionando Ctrl-V e, em seguida, Tab )

    
por 31.10.2012 / 18:04