для + выстраивают + args

Другой подход должен был бы использовать учет процесса BSD, который также доступен на Linux (хотя я не знаю, включен ли он по умолчанию). Это в основном сохраняет вкладку всех программ, которые запущены (и некоторые другие меры, как процессорное время, использованное и т.д.) столько, сколько учет активен. Оттуда несколько совокупных статистических данных доступны среди других: своего рода список всех программ когда-либо работает на системе, отсортированной по и т.д. главному количеству использования.

Команды для поиска lastcomm для синхронного журнала и sa для агрегированной статистики. Возвращение к исходному вопросу, предположение, что рассматриваемая система имела бы учет, включили, так как это было установлено, затем sa -n дал бы список всех команд, когда-либо выполняемых в системе (для всех пользователей), отсортированный по частоте. Для конвейеров каждая часть конвейера, конечно, считалась бы отдельно, поскольку каждая часть включает новый процесс, который будет разветвлен.

Для получения дополнительной информации журнал Linux имеет статью, объясняя работы. Я сам получил идею от руководства NetBSD; многие более универсальные рекомендации по администрированию там не характерны для NetBSD, но относятся к другим системам Unix также.

1
15.11.2013, 14:40
1 ответ

Если мы говорим ksh93 или bash (и GNU find), нет никаких массивов multidimentional (или массивы массивов), Вы могли сделать хотя:

index=0 IFS=$'\n'
set -f
for arg do
  eval "array_$index"'=($(find "$arg" -type l -maxdepth "$depth" -print))'
  ((index++))
done

Назвать различные массивы array_0, array_1...

(вышеупомянутое предполагает, что имена файлов не содержат символы новой строки).

Если Вы хотите все ссылки, объединенные в единый массив, то:

IFS=$'\n'
set -f
array=($(find "$@" -type l -maxdepth "$depth" -print))

должен быть достаточно.

Используя массивы или циклы в оболочках часто знак, что Вы не достигаете проблему правильный путь.

Например, если бы Вы хотите найти самую глубокую символьную ссылку (как Ваш комментарий предполагает), Вы сделали бы что-то как:

find "$@" -type l -print | awk -F/ '
   NF > n {deepest = $0; n=NF}
   END {print "Deepest:", deepest}'

awk будет намного более эффективным, чем оболочка к тексту процесса и работе с массивами. Это разработано для этого. Оболочки не (и bash из всех оболочек один из самых неэффективных в нем). Оболочки способны выполнять команды (как awk или find), это - то, для чего они разработаны.

2
27.01.2020, 23:39
  • 1
    Вы знаете, как считать каждый / в каждом индексе массива? я хочу узнать, какая символьная ссылка имеют самый длинный путь, таким образом, я хочу сделать что-то как, я буду считать каждый / в массиве [0] затем массив [1] и хранить его международный новый массив для exm maxarray, и в макс. массиве я найду максимум, и с другой стороны я пройду массив и рассчитаю / и когда количество / и макс. будет равно, я повторю ту ссылку –  xpukm 15.11.2013, 15:05
  • 2
    и как переписать Ваш документ на получение с awk, которые производят, будет как вывод в этой команде, находят - тип l-printf "%p-> %l\n", и я хочу рассчитать "/" только в %l, можно ли помочь мне? потому что я никогда не использовал awk –  xpukm 20.11.2013, 21:45

Теги

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