Mengganti ruang kosong nilai yang hilang dengan nol

11

Saya memiliki file teks yang dibatasi-tab input.txt di sekitar 30K baris, saya ingin memeriksa setiap baris (s1..s30K baris) untuk nilai yang hilang (yaitu ruang kosong) dan mengisi nilai yang hilang dengan nilai nol.Lihat keluar.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
mendongkrak
sumber

Jawaban:

13

Anda bisa melakukannya seperti ini dengan awk:

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

Penjelasan

Mengatur FS dan OFS ke tab memastikan output dibatasi dengan benar. For-loop melihat setiap bidang dan menetapkannya ke nol jika kosong. Yang di akhir adalah singkatan untuk { print $0 }.

Thor
sumber
5

Saya lebih suka:

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

Ganti <TAB>dengan karakter TAB asli (umumnya diperoleh dengan memukul Ctrl-V, lalu Tab)

mdpc
sumber