Замена пропущенного значения пробелом на ноль

13

У меня есть текстовый файл с разделителями табуляции input.txt размером около 30 КБ, я хотел бы проверить каждую строку (строки s1..s30K) на наличие пропущенного значения (т. Е. Пробела) и заполнить пропущенное значение нулевым значением. См. 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
Джек
источник

Ответы:

14

Вы можете сделать это так с помощью awk:

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

объяснение

Установка FS и OFS на вкладку гарантирует, что выходные данные правильно разграничены. Цикл for просматривает каждое поле и устанавливает его в ноль, если оно пустое. Тот, что в конце, является сокращением для { print $0 }.

Тор
источник
5

Я бы предпочел:

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

Заменить <TAB>реальным символом TAB (обычно получаемый при нажатии Ctrl-V, затем Tab)

Якорь,
источник