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

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 }.


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)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.