#linux #bash #awk
#linux #bash #awk
Вопрос:
Я пытаюсь вычислить некоторые значения, используя awk.Но я получаю разные результаты при делении на 100 и использовании команды linux getconf CLK_TCK.
В моем случае команда всегда возвращает 100:
[centos@op5test1 ~]$ getconf CLK_TCK
100
Теперь я пытаюсь вычислить некоторые значения, используя приведенное выше значение вывода команды.
[centos@op5test1 ~]$ echo 26178 4861 | awk '{print ($1 $2)/$(getconf CLK_TCK)}'
1.18569
и теперь присваиваем значение 100
[centos@op5test1 ~]$ echo 26178 4861 | awk '{print ($1 $2)/100}'
310.39
Почему я получаю разные значения?
Ответ №1:
Правильный способ передать вывод вашей getconf
команды из командной строки:
echo 26178 4861 | awk -v val=$(getconf CLK_TCK) '{print ($1 $2)/val}'
310.39
$(getconf CLK_TCK)
при использовании непосредственно внутри awk
команды вычисляется $0
, что является 26178 4861
, и затем вы эффективно выполняете:
print ($1 $2)/$0
который выполняет эту арифметику:
(26178 4861)/26178 => 1.18569
Комментарии:
1. Да, это решило мою проблему. Еще одно сомнение: если попытаться сохранить выходное значение this (getconf CLK_TCK) в какой-либо переменной, а затем попытаться использовать его в awk ‘{print ($ 1 $ 2) / $ val}’, все еще сохраняется $ 0 в $ val в awk?
2. вы можете использовать это в оболочке:
val=$(getconf CLK_TCK); echo 26178 4861 | awk -v val="$val" '{print ($1 $2)/val}'