web-dev-qa-db-ja.com

欠損値の空白スペースをゼロに置き換える

約30K行のinput.txtタブ区切りテキストファイルがあります。各行(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
13
jack

あなたはawkでこのようにすることができます:

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

説明

FSおよびOFSをタブに設定すると、出力が正しく区切られます。forループはすべてのフィールドを調べ、空の場合はゼロに設定します。最後の1は{ print $0 }の省略形です。

14
Thor

私は好む:

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

置換<TAB>は実際のTAB文字(通常、 Ctrl-V、その後 Tab

5
mdpc