将 csv 文件中的空字段替换为零

将 csv 文件中的空字段替换为零

我有一个包含 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 脚本将任何空字段替换为零。我想要产生的结果应该是这样的

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因此您可以轻松更改它。我没有费心对齐输出数据。

相关内容