결 측값 공백을 0으로 바꾸기


13

30K 줄 주위에 input.txt 탭으로 구분 된 텍스트 파일이 있는데 각 행 (s1..s30K 줄)에 결측 값 (예 : 공백)이 있는지 확인하고 결측 값을 0 값으로 채우고 싶습니다.

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-loop는 모든 필드를보고 비어 있으면 0으로 설정합니다. 끝에있는 것은 약칭입니다 { print $0 }.


5

나는 선호한다 :

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

<TAB>실제 TAB 문자로 대체하십시오 (일반적으로을 Ctrl-V누른 다음 을 누름 Tab)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.