Zastępowanie brakującej wartości pustym miejscem zerowym

13

Mam plik tekstowy rozdzielany tabulatorami input.txt wokół 30 000 wierszy, chciałbym sprawdzić każdy wiersz (wiersze s1..30 s) w poszukiwaniu brakującej wartości (tj. Pustego miejsca) i wypełnić brakującą wartość zerową wartością. Zobacz 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
Jacek
źródło

Odpowiedzi:

14

Możesz to zrobić w awk:

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

Wyjaśnienie

Ustawienie FS i OFS na tab zapewnia prawidłowe rozdzielenie danych wyjściowych. Pętla for sprawdza każde pole i ustawia je na zero, jeśli jest puste. Ten na końcu jest skrótem { print $0 }.

Thor
źródło
5

Wolałbym:

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

Zamień <TAB>na prawdziwy znak TAB (zazwyczaj uzyskiwany przez uderzenie Ctrl-V, a następnie Tab)

mdpc
źródło