Описание тега evn
В данном примере,
на awk 'шп==1{$4="коэффициент"}НР>1{$4 = ($3)/($2)} {печать $1 "\Т" $2 "\Т" $3 "\Т" $4}' Б
ШП
- это количество записей, считанных до сих пор. Можно использовать его в пример такой, чтобы пропустить заголовка таблицы такой:
Дата Количество Стоимость
2016/04/10 12.57 3
2016/04/19 11.74 2
поскольку вы не можете разделить "стоимость" на "количество" (они не являются числами).
Кстати, ваши данные могут иметь четыре (или более) столбцов. Однако awk позволит вам назначить столбцы, которые не во входных данных. Таким образом, первоначальные $4="коэффициент"
может быть изменение существующего столбца, а скорее добавляет столбец данных для отражения расчетов на последующих записей.
Ошибка (деление на ноль) - это совсем другое дело, чем интерпретация НР
. Вы можете проверить, если у вас есть числовые данные в $2
и $3
, используя выкройку, например, при добавлении этой проверки:
чтобы произвести что-то вроде
#!/Бен/ш
isnum функция у awk '(в) {
если ( V ~ /^[0-9.]+$/ )
возвращение 1;
еще
возврат 0;
}
(НР==1) {коэффициент 4$=""}
(НР>1 && НФ >= 3 && isnum($2) && isnum($3) && 3 $> 0){4 $= ($3)/($2)}
{печати $1 "\Т" $2 "\Т" $3 "\Т" $4}' Б
В isnum
функции упрощено, но позволит беззнаковые десятичные дроби.
Если вы предпочитаете скрипт в одну строку, имейте в виду, что скрипты на awk бесплатно-формат. Так что... вы могли бы сделать это:
на awk функция isnum(в) {, Если(V~/^[0-9.]+$/)возврат 1;иначе возврат 0;}(НР==1){$4="коэффициент"}(НР>1&&НФ>=3&&isnum($2)&&isnum($3)&&$3>0){$4=($3)/($2)}{печать $1"\Т"$2"\Т"$3"\Т"$4}' Б