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

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 }.


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)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.