Я пытаюсь разобрать строки из журнала ошибок в BASH, а затем отправить определенную часть в переменную BASH, которая будет использоваться позже в скрипте, и возникнуть проблемы после того, как я попытаюсь передать ее к переменной BASH.Проблемы с передачей AWK на BASH-переменную
Что файл журнала выглядит следующим образом:
1446851818|1446851808.1795|12|NONE|DID|80
Мне нужен номер в третьем сете (в этом случае число 12) линии
Вот пример команды I бегу:
tail -n5 /var/log/asterisk/queue_log | grep 'CONNECT' | awk -F '[|]' '{print $3}'
строка кода пытается выполнить это:
- захватить последние строки файла журнала
- Поиск по фразе (в данном случае подключения, я использую ту же команду, чтобы вызвать различные элементы)
- Отдельный номер в третьем сете линии так, он может быть использован в других
Если я запускаю выше полную команду, она выполняется успешно, как так:
tail -n5 /var/log/asterisk/queue_log | grep 'CONNECT' | awk -F '[|]' '{print $3}'
12
Теперь, если я пробую и присвоить его переменной в одной и той же линии/команды, я Мне не удалось вернуть его назад BLE.
Моя команда при назначении переменной выглядит следующим образом:
tail -n5 /var/log/asterisk/queue_log | grep 'CONNECT' | brand=$(awk -F '[|]' '{print $3}')
(Он запущен в том же сценарии, как эхо команды, так что переменная должна быть тонкой, тестовый скрипт выглядит следующим образом:
#!/bin/bash
tail -n5 /var/log/asterisk/queue_log | grep 'CONNECT' | brand=$(awk -F '[|]' '{print $3}')
echo "$brand";
Я знаю, что это, скорее всего, не самое эффективное/красноречивое решение для этого, поэтому, если есть другие идеи/способы достижения этого, я открыт для них (мои навыки BASH являются базовыми, но улучшающими)
Не 'Foo | x = $ (bar) ', вместо этого' x = $ (foo | bar) '. –
Правая сторона трубы работает в подоболочке, поэтому внесенные в нее изменения теряются, когда эта сторона трубопровода выходит: 'x = hello; эхо прощай | читать x; echo $ x' будет выводить 'hello', а не' good-bye'. –