Fehlende Leerzeichen durch Null ersetzen

13

Ich habe eine tabulatorgetrennte Textdatei input.txt mit ca. 30.000 Zeilen. Ich möchte jede Zeile (s1..s30K Zeilen) auf fehlende Werte (dh Leerzeichen) überprüfen und den fehlenden Wert mit dem Wert Null füllen. Siehe 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
Jack
quelle

Antworten:

14

Sie könnten es so mit awk machen:

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

Erläuterung

Wenn Sie FS und OFS auf die Registerkarte setzen, wird sichergestellt, dass die Ausgabe korrekt abgegrenzt ist. Die for-Schleife betrachtet jedes Feld und setzt es auf Null, wenn es leer ist. Der am Ende ist eine Abkürzung für { print $0 }.

Thor
quelle
5

Ich würde bevorzugen:

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

Ersetzen Sie <TAB>mit den realen TAB - Zeichen ( im Allgemeinen durch Anschlagen erhalten Ctrl-V, dann Tab)

mdpc
quelle