Замена пустых полей нулем в CSV-файле

У меня есть CSV-файл с 9 столбцами, в каждом из которых есть разные строки. Файл выглядит так:

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
-2
15.01.2017, 15:43
2 ответа

Решение жестко запрограммировано для количества столбцов и предполагается, что только последние столбцы могут быть пустыми:

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
0
28.01.2020, 05:18

Попробуйте следующее:

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

Количество столбцов передается как переменная cols , поэтому вы можете легко его изменить. Выравнивать выходные данные я не стал.

0
28.01.2020, 05:18

Теги

Похожие вопросы