awk -F: '
FNR == NR { c2[$1] = $2; c3[$1] = $3; next }
!($1 in c2) {
printf("%d: $1 not found in reference\n", $1)
next
}
$3 > c3[$1] && $2 == "!" {
printf("%d: target has bigger $3 (%d>%d) but disabled $2 (%s)\n", $1,$3,c3[$1],$2)
next
}
$3 > c3[$1] && $2 != c2[$1] {
printf("%d: target has bigger $3 (%d>%d) but different $2 (%s)\n", $1,$3,c3[$1],$2)
}' reference target
При этом считывается эталонный файл, а затем целевой файл.
При чтении эталонного файла(FNR == NR
)он собирает значения второго и третьего столбцов в двух массивах c2
и c3
. В качестве индекса используется значение в первом столбце.
При чтении целевого файла(FNR != NR
)значение в третьем столбце будет сравниваться с сохраненным значением в массиве c3
. Затем он также сравнивает второй столбец с !
или с сохраненным вторым столбцом из эталонного файла в c2
.
Код также выдает дополнительное сообщение, если первый столбец целевого файла не найден в эталонном файле.
Вывод, учитывая данные в вопросе с добавленной целевой строкой(56:C:9
):
42: target has bigger $3 (1>0) but disabled $2 (!)
45: target has bigger $3 (2>1) but different $2 (B)
56: $1 not found in reference
Я пытался понять почему, и это моя лучшая попытка найти ответ. Если я ошибаюсь, так и скажите.
Исходный код моей текущей версии турбостата можно найти здесь .
Если я запускаю турбостат с опцией --show
, вызывается функция bic_lookup
. Если я запускаю turbostat с именами уровня C, такими как:--show C1,C3
и т. Д., Я всегда получаю эту ошибку .
Мне кажется, что «проблема» заключается в этой строке , потому что эта структура не имеет имен C1, C3 и т. д., которые я использую в качестве параметров с --show
вариант. Это также говорит в комментарий:
1. built-in only, the sysfs counters are not here -- we learn of those at run-time
Те уровни C, которые я использую, являются счетчиками sysfs, turbostat узнает о них только во время -выполнения, но цикл в bic _функция поиска работает только с этими жесткими -] закодированные имена столбцов. Если я использую одно из имен, прямо написанных в структуре bic
, турбостат на самом деле показывает мне только такой столбец (с ), как и ожидалось.
Кажется, единственный вариант — использовать --show sysfs
, который печатает нужные мне столбцы.
В целом, справочная страница кажется немного запутанной, когда она говорит:
--list display column header names available for use by --show and --hide, then exit.
, потому что при выполнении --list
отображаются даже имена столбцов, такие как C1, C3.
(Обратите внимание, что я не программист, поэтому моя терминология может быть запутанной или неправильной. Не стесняйтесь редактировать мой комментарий по мере необходимости.)