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

13

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

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
jack
fonte

Respostas:

14

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

Definir FS e OFS para tab garante que a saída seja delimitada corretamente. O loop for examina todos os campos e o define como zero se estiver vazio. O do final é uma abreviação de { print $0 }.

Thor
fonte
5

Eu preferia:

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

Substitua <TAB>pelo caractere TAB real (geralmente obtido pressionando Ctrl-V, então Tab)

mdpc
fonte