Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: вопроc по bash  (Прочитано 977 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Barmadron

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
вопроc по bash
« : 13 Июня 2017, 15:42:08 »
Всем привет.
 Подскажите пожалуйста , есть файл 1.log  внутри много строчек двух видов, сначала много строчек вида "123 абв а1б2в3" потом много строчек "blablabla 123 абв" мне нужно удалить вторую часть лога и вытащить из третьего столбца последнюю строку, "blablabla" заранее известно но может меняться.
я попытался использовать seda=$(cat 1.log | sed '/blablabla/,$ d'| awk '{print $ 3}'| tail -n 1 )
echo $a
работает, но так как "блаблабла" меняться мне нужно чтобы она была переменной и при попытке ввести
keyword="blablabla"
a=$(cat 1.log | sed '/$keyword/,$ d'| awk '{print $ 3}'| tail -n 1 )
echo $a
вторая часть лога не обрезается и в итоге получаю не то что нужно
« Последнее редактирование: 13 Июня 2017, 15:49:04 от Barmadron »

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: вопроc по bash
« Ответ #1 : 13 Июня 2017, 16:07:54 »
awk -v word="blablabla" '{if($1 == word){next}; str=$3}END{print str}' 1.log

Оффлайн Barmadron

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: вопроc по bash
« Ответ #2 : 13 Июня 2017, 16:35:48 »
awk -v word="blablabla" '{if($1 == word){next}; str=$3}END{print str}' 1.log
Либо я чтото упустил либо он печатает последнюю строку второй части которую нада было обрезать..

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: вопроc по bash
« Ответ #3 : 13 Июня 2017, 16:46:21 »
Значит
потом много строчек
не содержит в первом поле "blablabla"

Оффлайн Barmadron

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: вопроc по bash
« Ответ #4 : 13 Июня 2017, 16:53:53 »
спасибо за ответ,  навёл меня на мысль о скобках и кавычках , через  sed можно так :
keyword="blablabla"
a=$(cat 1.log | sed "/${keyword}/,$ d"| awk '{print $ 3}'| tail -n 1 )
echo $a

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: вопроc по bash
« Ответ #5 : 13 Июня 2017, 17:03:09 »
awk -v word="blablabla" '($0!~word){str=$3}END{print str}' 1.log

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: вопроc по bash
« Ответ #6 : 13 Июня 2017, 21:25:44 »
sed "N;/$keyword/! D; s/[^\n]* //; P ; Q" 1.log
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

Страница сгенерирована за 0.03 секунд. Запросов: 25.