Этот однострочный вариант подойдет, но я думаю, что есть более эффективный способ ...
dmesg -T | perl -MSys::Hostname -pe 's/^\[(.*?)\]/$_=`date +[%d-%m-%H-%M] -d "$1"`;chomp;$_." ".&hostname/e'
$ 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
, выводится имя столбца и процентное значение.