Сценарий оболочки для присвоения значений от справочной таблицы является слишком медленным

Перейдите к каталогу журналов событий и дайте хвост-f * для просмотра всех недавних журналов.

3
24.10.2014, 16:26
2 ответа

Как насчет:

while read code device state junk; do
    if [[ $code == $message ]]; then
        echo "Translated: $device-$state"
    fi
done <CODE-LIST.txt

с использованием дополнительных процессов (то есть выпукание awk каждый раз) будет много замедлить его. Чтение будет читать несколько полей, разделенных $ ifs (значение по умолчанию - это белое пространство). Последняя переменная переменная получит оставшуюся часть строки, если таковая имеется.

Мне просто интересно, где придет $ Message . За пределами кода-фрагмента возможно?

Редактировать: Если часть кода будет происходить только один раз на входе, то вы можете разрыв из цикла после его обнаружения; Это также будет ускорить вещи.

6
27.01.2020, 21:09

может использовать awk для всего.
Awk также гораздо быстрее, чем , прочитав петли.

awk -vM="$Message" '$1==M{print "Translated:",$2"-"$3}' CODE-LIST.txt

Объяснение

    -vM="$Message" - Create a variable named M with the value from $Message

     $1==M         - If the first field is equal to variable M($Message)

     {print "Translated:",$2"-"$3} - Write Translated and the second and third fields

     CODE-LIST.txt - The file being read

Дополнительные заметки по коду

A , , используется в сочетании с печатью для печати OFS (вывод сепаратора вывода), которые по умолчанию это пространство
Отказ
Если не указано по-разному, код по умолчанию будет работать в каждой строке файла.
Отказ
Команда печати добавит или с добавлением или сепаратором выходных записей) до конца печатающей струны. Это по умолчанию новая линия.

5
27.01.2020, 21:09

Теги

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