У меня была аналогичная проблема, и я выполнил команду TOP в фоновом режиме и перенаправил ее в файл txt
top > top.txt &
Спасибо, что вы видите, какой процесс тратит ваш процессор
Вот как я подошел к этой проблеме:
awk '{n=1;if(NR==1)n=25;for(i=n;i<=NF;i++) a[$i]++} END{for(val in a) print val,a[val]}' input.txt
Тот факт, что вы хотите захватить поля 25 и далее в первой строке, требует, чтобы мы проверили переменную NR
и установили переменную n
, которая будет использоваться в цикле. Что касается a[$i]++
, это будет ассоциативный массив с полями, являющимися ключами, а значения внутри массива будут увеличиваться с помощью оператора ++
. Это очень типичный способ подсчета полей в awk.
Как насчет
awk '{for (i=25; i<=NF; i++) print $i; exit}' file | sort | uniq -c
6 string1
6 string2
6 string3
6 string4
6 string5
6 stringN
РЕДАКТИРОВАТЬ:В вашем недавно добавленном образце ввода у вас нет 24 полей, которые нужно игнорировать до начала подсчета, и ограничение на первую строку (, как следует из вашего первого фрагмента кода ), похоже, имеет тоже ушел. Попробуйте
tr -s ' ' '\n' <file | sort | uniq -c
2 Column1
2 Column2
3 Column3
3 ColumnN