извлекать столбцы из матрицы ИСТИНА / ЛОЖЬ на основе пропорции ИСТИННЫХ значений в столбце

Этот однострочный вариант подойдет, но я думаю, что есть более эффективный способ ...

dmesg -T | perl -MSys::Hostname -pe 's/^\[(.*?)\]/$_=`date +[%d-%m-%H-%M] -d "$1"`;chomp;$_." ".&hostname/e'
2
18.06.2018, 04:15
1 ответ
$ awk -v p='10' 'NR==1 { split($0,cols); next }
                 { 
                     for (i=2; i<=NF; ++i)
                         nt[i] += ($i == "TRUE" ? 1 : 0 )
                 }
                 END {
                     for (i=2; i<=NF; ++i) {
                         cp = 100*nt[i]/NR
                         if (cp > p) printf("%-20s %.2f%%\n", cols[i], cp)
                     }
                 }' file
MT                   30.00%
group1               20.00%
group1.9             30.00%

Программа awkиспользует параметр p, который представляет собой процент от TRUE, необходимый для отображения заголовка столбца.

Из первой строки он сохраняет все заголовки столбцов в массив cols. Затем подсчитывается, сколько раз слово TRUEвстречается в каждом столбце. В конце он вычисляет процент строк, которые были TRUEв каждом столбце как cpи сравнивает это с p. Если оно больше заданного значения p, выводится имя столбца и процентное значение.

0
27.01.2020, 22:09

Теги

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