Remplacement de l'espace vide de la valeur manquante par zéro

13

J'ai un fichier texte délimité par des tabulations input.txt autour de 30K lignes, je voudrais vérifier chaque ligne (s1..s30K lignes) pour la valeur manquante (c'est-à-dire un espace vide) et remplir la valeur manquante avec une valeur nulle.Voir out.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
jack
la source

Réponses:

14

Vous pouvez le faire comme ça avec awk:

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

Explication

La définition de FS et OFS sur tab garantit que la sortie est correctement délimitée. La boucle for examine chaque champ et le met à zéro s'il est vide. Celui à la fin est un raccourci pour { print $0 }.

Thor
la source
5

Je préfèrerais:

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

Remplacez <TAB>par le vrai caractère TAB (généralement obtenu en appuyant Ctrl-V, puis Tab)

mdpc
la source