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


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

Автор Тема: определение позиции awk  (Прочитано 759 раз)

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

Оффлайн Greenhed

  • Автор темы
  • Новичок
  • *
  • Сообщений: 34
  • Йож
    • Просмотр профиля
определение позиции awk
« : 19 Декабря 2012, 15:53:37 »
не знаю даже как по другому тему обозвать. Суть вот в чем:


есть строка <yweather:condition text="Fair" code="34" temp="-18" date="Wed, 19 Dec 2012 4:00 pm MSK"/>

беру awk значение temp из этой строки awk '{ gsub(/temp="/, ""); gsub (/"/, ""); print $4}

все работает корректно до тех пор пока значение "text" в строке из одного слова. Но в некоторых случаях оно из двух слов, и тогда у меня awk считывает не то значение. Вопрос, как сделать сделать проверку и в зависимости от результата прочитать нужную позицию?

Оффлайн vselax

  • Активист
  • *
  • Сообщений: 309
    • Просмотр профиля
Re: определение позиции awk
« Ответ #1 : 19 Декабря 2012, 16:18:15 »
echo '<yweather:condition text="Fair" code="34" temp="-18" date="Wed, 19 Dec 2012 4:00 pm MSK"/>' | awk -F \" '{print $2}'Fair
echo '<yweather:condition text="Fair 123" code="34" temp="-18" date="Wed, 19 Dec 2012 4:00 pm MSK"/>' | awk -F \" '{print $2}'Fair 123

Оффлайн Greenhed

  • Автор темы
  • Новичок
  • *
  • Сообщений: 34
  • Йож
    • Просмотр профиля
Re: определение позиции awk
« Ответ #2 : 19 Декабря 2012, 17:01:50 »
Ок. спасибо, в случае если нужно именно этот параметр взять все работает. Но если надо взять следующий параметр, то проблема, увы не решена, потому как awk отсчитывает позицию по пробелам (


Оффлайн vselax

  • Активист
  • *
  • Сообщений: 309
    • Просмотр профиля
Re: определение позиции awk
« Ответ #3 : 19 Декабря 2012, 17:17:14 »
По двойным кавычкам. Ключь -F это указывает \" - экранированные кавычки.
echo '<yweather:condition text="Fair 123" code="34" temp="-18" date="Wed, 19 Dec 2012 4:00 pm MSK"/>' | awk -F \" '{print $6}'-18
echo '<yweather:condition text="Fair 123" code="34" temp="- 18" date="Wed, 19 Dec 2012 4:00 pm MSK"/>' | awk -F \" '{print $6}'- 18
echo '<yweather:condition text="Fair 123" code="+ 34" temp="- 18" date="Wed, 19 Dec 2012 4:00 pm MSK"/>' | awk -F \" '{print $6}'- 18
echo '<yweather:condition text="Fair" code="+ 34" temp="- 18" date="Wed, 19 Dec 2012 4:00 pm MSK"/>' | awk -F \" '{print $6}'- 18
echo '<yweather:condition text="Fair" code="+ 34" temp="-18" date="Wed, 19 Dec 2012 4:00 pm MSK"/>' | awk -F \" '{print $6}'-18
Все работает. Что не так? Позиция везде одна и та же, пробелы - сколько угодно, они игнорируются.

Оффлайн Greenhed

  • Автор темы
  • Новичок
  • *
  • Сообщений: 34
  • Йож
    • Просмотр профиля
Re: определение позиции awk
« Ответ #4 : 19 Декабря 2012, 17:23:02 »
Пардон, туплю, неправильно понял как оно работает. Так, да, так все работает, спасибо =)

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: определение позиции awk
« Ответ #5 : 22 Декабря 2012, 23:07:41 »
Код: (bash) [Выделить]
$ echo '<yweather:condition text="Fair 123" code="34" temp="-18" date="Wed, 19 Dec 2012 4:00 pm MSK"/>' | sed 's/.*temp="\([^"]*\)".*/\1/g'
-18

 

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