Суммирование вхождений строки для каждой строки матрицы с помощью awk

Я не вижу упоминания об этом в руководстве по GNU awk, но, например. справочная страница для функции printf()в glibc упоминает о %g, что:

Trailing zeros are removed from the fractional part of the result; a decimal point appears only if it is followed by at least one digit.

Кроме того, есть модификатор #для «альтернативного формата», который говорит:

For g and G conversions, trailing zeros are not removed from the result as they would otherwise be.

Кроме того, %gавтоматически изменяется на формат 1.23e+3по мере необходимости, а в поле точность (число после точки )является «максимальным числом значащих цифры для преобразований g и G"(не цифры после запятой ), поэтому мы получаем:

printf "%#.1g\n", 0                             0.
printf "%#.2g\n", 0                             0.0
printf "%#.2g\n", 12                            12.
printf "%#.2g\n", 1234                          1.2e+03

Таким образом, хотя вы можете принудительно отображать десятичную точку, вы не можете принудительно отображать нуль в конце.

Альтернативой может быть использование %fвместо:

printf "%.1f\n", 0                              0.0
printf "%.1f\n", 1234                           1234.0

Или добавить отсутствующий ноль после точки при необходимости:

a = sprintf("%#.1g", 0); if (substr(a, length(a)) == ".") a = a "0";

1
18.11.2019, 08:58
1 ответ

Прямо:

$ awk '{ for (i=2;i<=NF;i++) if ($i=="NA") c++; print c; c=0 }' file
5
5
6
1
27.01.2020, 23:29

Теги

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