Как узнать самое большое количество во многих документах, которое содержит различные числа

Это - мое понимание ситуации, но я не эксперт, таким образом, это является менее техническим, чем другие ответы. Это - то, что я понимаю после использования этих систем много лет, я не изучил их во всех подробностях.

Существует три основных плеера здесь, и между ними они управляют монтированием:

  • FUSE: Это в центре всего, как описано на его странице Википедии:

    Файловая система в Пространстве пользователя (FUSE) является механизмом операционной системы для подобных Unix операционных систем компьютера, который позволяет непривилегированным пользователям создать свои собственные файловые системы, не редактируя код ядра. Это достигается путем выполнения кода файловой системы в пространстве пользователя, в то время как модуль FUSE предоставляет только "мост" фактическим интерфейсам ядра.

    Так, в основном это - то, что позволяет непривилегированным пользователям монтировать файловые системы.

  • gvfs : В семействе Gnome настольных сред (который включает Gnome, Помощника, Корицу), это - (среди прочего) демон, который автоматически смонтирует недавно подключенные диски. Это делает так через FUSE. Я верю (но может быть неправильным), эквивалент для семейства KDE называют KIO

    Основные процессы gvfs (взятый от man gvfs):

    • gvfsd - основной gvfs демон
    • gvfs-fuse-daemon - монтирует gvfs как файловую систему предохранителя
    • gvfsd-метаданные - пишут gvfs метаданные
  • udev : Это - система, которая обнаруживает новые устройства и позволяет Вам выполнять сценарии/команды, когда они соединены. Например, это udev это обнаруживает новый экран и может зеркально отразить Ваш рабочий стол на нем:

    udev является диспетчером устройств для ядра Linux. Прежде всего, это управляет узлами устройства в/dev. Это - преемник devfs и замены в горячем режиме, что означает, что это обрабатывает/dev каталог и все действия пространства пользователя при добавлении/удалении устройств, включая микропрограммную загрузку.

    А именно, gvfs кажется, работает через gvfs-udisks2-volume-monitor который является находящимся в udisks монитором объема. udisks самостоятельно однако, полагается udev (см. man 7 udisks).

Так, в основном (чтение "ужасное упрощение") то, что происходит, является этим, когда Вы подключаете свой диск, udev обнаруживает его и предупреждает gvfs демон, который затем смонтирует его как устройство FUSE.

FUSE и udev будет то же для всех настольных сред, что изменения является демоном DE, который контролирует udev и монтирует диск как файловую систему FUSE.

3
28.11.2014, 00:06
3 ответа

Для получения желаемого результата можно использовать комбинацию find, grep и awk. Ниже приведен oneliner, который распечатает файл с записанной максимальной температурой. Вывод

find . -mindepth 3 -exec echo -n "{} " \; -exec grep "PROCESSOR_ZONE" {} \; |
awk '{
    split($4,val,"/");
    gsub("C","",val[1]);
    if (max<val[1]) {file=$1; max=val[1]}
} END {print(file)}'

Вывод

./2012.04.16/00:10/temps.txt

Ниже приведена версия сценария script oneliner.

#!/bin/bash

# The path where temperature directories and files are kept
path="/tmp/tmp.ADntEuTlUT/"

# Temp file
tempfile=$(mktemp)

# Get the list of files name and their corresponding
# temperature data.
find "${path}" -mindepth 3 -exec echo -n "{} " \; -exec grep "PROCESSOR_ZONE" {} \; > "${tempfile}"

# Parse though the temp file to find the maximum 
# temperature based on Celsius
awk '{split($4,val,"/");gsub("C","",val[1]);if(max<val[1]){file=$1;max=val[1]}} END{print(file)}' "${tempfile}"

# Removing the temp file
rm -f "${tempfile}"
4
27.01.2020, 21:23

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

find . -name "temps.txt" -print|xargs tail -n 1 | awk '{split($NF,temp,"[CF/]");print temp[1]}'|sort -r | head -n 1
-1
27.01.2020, 21:23

С GNU grep , при условии, что пути к файлам не содержат символов новой строки:

grep -rHPo 'PROCESSOR_ZONE\s+\K\d+C' . | awk -F: '
   0+$NF >= max {max = $NF; text = $0}; END {print text}'
0
27.01.2020, 21:23

Теги

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