csv 파일의 빈 필드를 0으로 바꾸기

csv 파일의 빈 필드를 0으로 바꾸기

9개의 열이 있는 csv 파일이 있는데, 세 개의 열마다 서로 다른 행이 있습니다. 파일은 다음과 같습니다

1  6.2   0.5  1  0.08  0.5   1  0.001  0.1
2  5.2   0.6  2  0.01  1.3   2  0.008  0.8
3  4.3   0.7  3  0.002 0.32
4  2.0   0.7  4  0.2   0.35
5  13.1  1.3  5  0.54  4.32
6  1.02  1.67

Bash 스크립트를 사용하여 빈 필드를 0으로 바꾸고 싶습니다. 내가 만들고 싶은 결과는 다음과 같아야합니다

1  6.2   0.5  1  0.08  0.5   1  0.001  0.1
2  5.2   0.6  2  0.01  1.3   2  0.008  0.8
3  4.3   0.7  3  0.002 0.32  3  0      0
4  2.0   0.7  4  0.2   0.35  4  0      0
5  13.1  1.3  5  0.54  4.32  5  0      0
6  1.02  1.67 6  0     0     6  0      0

답변1

해결책은 열 수를 하드코딩하고 이후 열만 비어 있을 수 있다고 가정하는 것입니다.

awk 'BEGIN { OFS=FS="\t" } {
  $1=NR; if(!$2)$2=0; if(!$3)$3=0;
  $4=NR; if(!$5)$5=0; if(!$6)$6=0;
  $7=NR; if(!$8)$8=0; if(!$9)$9=0;
  print }' /path/to/your.csv

답변2

이 시도:

awk -v cols=9 '{
    printf "%s", $0
    for (n = NF; n < cols; n++) printf "\t%d", (n % 3 == 0 ? NR : 0)
    print ""
}' file

열 수는 변수로 전달되므로 cols쉽게 변경할 수 있습니다. 나는 출력 데이터를 정렬하는 데 신경 쓰지 않았습니다.

관련 정보