The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"less и переменная с пробелами"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"less и переменная с пробелами"  +/
Сообщение от Alting email(ok) on 23-Дек-10, 09:28 
Коллеги, моск мой зашел в тупик.

Есть некий шелл-скрипт, в этом скрипте less передается некая переменная, содержащая пробелы.

Эта переменная - путь.

Если перед less поставить echo $string - он честно выводит путь:
/mnt/backup/VM/IPO_LIFE_DATE/31-08-2010/mnt/jaguar/Сенькова\ ТА/c5032fb5b0154f31b945ef828d0d2333.WAV

содержимое (а точнее - riff заголовок) файла, нужно передать другой переменной:
riff=`less $string | grep -v RIFF | grep -v WAVEfmt  | grep -v ALCH | grep -v Avaya | grep -v data | grep -v fact | paste -s`

И если в консоли сделать less этот пусть - честно откроет содержимое файла.
А если в скрипте, нет! Честно передается путь до первого пробела и обрезается.
Соотвтетственно пишет, что путь не найден :(

Как сделать правильно, чтобы less честно и без изменений читал переменную?

Система Linux Mandriva 2010

less -V
less 436
Copyright (C) 1984-2009 Mark Nudelman

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "less и переменная с пробелами"  +/
Сообщение от vg (??) on 23-Дек-10, 09:40 
кавычки, двойные - "$string"

а если вместо less использовать head/tail ?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "less и переменная с пробелами"  +/
Сообщение от Alting email(ok) on 23-Дек-10, 10:09 
> кавычки, двойные - "$string"
> а если вместо less использовать head/tail ?

Ага! Точно! :)
Упростил скрипт, а то переменная на переменной.
Все дело в том, что почему-то именно в этом дистрибутиве и именно эта версия less просто так показывает riff заголовок :)

==> append : to filename to view the  RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 8000 Hz source
RIFFf
WAVEfmt
ALCH
Avaya
2500
2608
2608
fact
data@

Почему, фиг знает.
Остается немного очистить от мусора - и вот тебе готовые данные.
Теперь попробую чистить мусор...
Как вывести less первые n строк?


Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "less и переменная с пробелами"  +/
Сообщение от Alting email(ok) on 23-Дек-10, 13:08 
>> кавычки, двойные - "$string"
>> а если вместо less использовать head/tail ?
>
> Как вывести less первые n строк?

туплю... -N конечно же..

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "less и переменная с пробелами"  +/
Сообщение от allez (ok) on 23-Дек-10, 13:43 
>> Как вывести less первые n строк?
> туплю... -N конечно же..

Если я что-нибудь в чем-нибудь понимаю, то дыра - это нора... Э-э, прошу прощения, увлекся. :-)
В общем, опция -N утилиты less вроде как должна нумеровать выводимые строки, а не
ограничивать их количество...

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "less и переменная с пробелами"  +/
Сообщение от Alting email(ok) on 23-Дек-10, 15:48 
>>> Как вывести less первые n строк?
>> туплю... -N конечно же..
> Если я что-нибудь в чем-нибудь понимаю, то дыра - это нора... Э-э,
> прошу прощения, увлекся. :-)
> В общем, опция -N утилиты less вроде как должна нумеровать выводимые строки,
> а не
> ограничивать их количество...

А если я еще что-то понимаю в less, то она, как и find сильно зависит от версии дистрибутива :)))
В любом, случае, обошелся более изящным решением.
Теперь вот понять бы, почему (?) less в мандриве довольно-таки сносно выводит riff заголовок из wav файла, а вот, к примеру, тот же центос или альт линукс воспринимает файл, как двоичный (в общем-то, правильно воспринимает) и выводит абракадабру:
RIFF6b ^@WAVEfmt ^P^@^@^@^A^@^A^@@^_^@^@<80>>^@^@^B^@^P^@ALCH<EE>^@^@^@Avaya^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@4959561512^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@<BD>c<9D><CE>^@^@2552^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@2002^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@<CF><F3><EB><FC> <C4><CC><D1>^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@fact^D^@
^@^@^Pa ^@data^Pa ^@^@^C<A0>^B
ну и так далее.

Что такого "подкрутили" французы, интересно? :)

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "less и переменная с пробелами"  +/
Сообщение от allez (ok) on 23-Дек-10, 18:43 
>[оверквотинг удален]
>>> туплю... -N конечно же..
>> Если я что-нибудь в чем-нибудь понимаю, то дыра - это нора... Э-э,
> А если я еще что-то понимаю в less, то она, как и
> find сильно зависит от версии дистрибутива :)))
> В любом, случае, обошелся более изящным решением.
> Теперь вот понять бы, почему (?) less в мандриве довольно-таки сносно выводит
> riff заголовок из wav файла, а вот, к примеру, тот же
> центос или альт линукс воспринимает файл, как двоичный (в общем-то, правильно
> воспринимает) и выводит абракадабру:
> Что такого "подкрутили" французы, интересно? :)

Не знаю, честное слово, не знаю. :-)
Да какая, в сущности, разница, что "подкрутили" и кто - французы, бразильцы или граждане Непала,
зачатые непальцем и непалкой? :-) В обязанности less входит постраничный вывод текстовой
информации на экран и не более. Чем пытаться понять, почему оно себя так ведет в Мандриве, на
мой сугубо личный взгляд, стоило бы подыскать инструмент, более соответствующий задаче.

Я, например, поискал в том же Гугле по запросу "linux wav riff dump" и в результатах поиска
нашел утилитку под названием T@b Riff Dump. Вот образец ее работы:

$ ./tabriffdump ~/Documents/xine-out.wav 

fmt
====
structure size=18 (0x00000012)
wFormatTag=1 (0x00000001)
nChannels=2 (0x00000002)
nSamplesPerSec=32000 (0x00007d00)
nAvgBytesPerSec=128000 (0x0001f400)
nBlockAlign=4 (0x00000004)
wBitsPerSample=16 (0x00000010)
cbSize=0 (0x00000000)


RIFF size=857124
     WAVE
     fmt  size=16
     data size=857088

Гляньте, пожалуйста, не то ли это, что Вам нужно?

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "less и переменная с пробелами"  +/
Сообщение от Alting email(ok) on 27-Дек-10, 08:24 
>[оверквотинг удален]
> nAvgBytesPerSec=128000 (0x0001f400)
> nBlockAlign=4 (0x00000004)
> wBitsPerSample=16 (0x00000010)
> cbSize=0 (0x00000000)
> RIFF size=857124
>      WAVE
>      fmt  size=16
>      data size=857088
>
> Гляньте, пожалуйста, не то ли это, что Вам нужно?

Да, я и эту улиту смотрел и какой-то страшный скрипт на питоне и еще много чего еще.. Но мне нужно именно содержимое RIFF заголовка, а все эти утилиты показывают просто информацию о нем :(
Но, тем не менее, я добился своей цели, спасибо! Скрипт работает 7 часов, но его нужно запускать разово для первичного наполнения (или восстановления в случае косяков) базы.
Потом достаточно парсить суточные записи.
Спасибо Вам огромное!

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "less и переменная с пробелами"  +/
Сообщение от anonymous (??) on 06-Янв-11, 16:00 
>> кавычки, двойные - "$string"
>> а если вместо less использовать head/tail ?
> Ага! Точно! :)
> Упростил скрипт, а то переменная на переменной.
> Все дело в том, что почему-то именно в этом дистрибутиве и именно
> эта версия less просто так показывает riff заголовок :)

я думаю, это не сам less, а lessopen.sh

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

9. "less и переменная с пробелами"  +/
Сообщение от Alting email(ok) on 11-Янв-11, 10:05 
>>> кавычки, двойные - "$string"
>>> а если вместо less использовать head/tail ?
>> Ага! Точно! :)
>> Упростил скрипт, а то переменная на переменной.
>> Все дело в том, что почему-то именно в этом дистрибутиве и именно
>> эта версия less просто так показывает riff заголовок :)
> я думаю, это не сам less, а lessopen.sh

Да, я тоже уже понял, теперь осталось понять, как прикрутить все это в другой дистрибутив :)


Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "less и переменная с пробелами"  +/
Сообщение от Alting email(ok) on 12-Янв-11, 12:13 
>>>> кавычки, двойные - "$string"
>>>> а если вместо less использовать head/tail ?
>>> Ага! Точно! :)
>>> Упростил скрипт, а то переменная на переменной.
>>> Все дело в том, что почему-то именно в этом дистрибутиве и именно
>>> эта версия less просто так показывает riff заголовок :)
>> я думаю, это не сам less, а lessopen.sh
> Да, я тоже уже понял, теперь осталось понять, как прикрутить все это
> в другой дистрибутив :)

Все, разобрался :)

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "less и переменная с пробелами"  +/
Сообщение от allez (ok) on 13-Янв-11, 18:09 
> Все, разобрался :)

Тогда, пожалуйста, опишите здесь найденное решение, чтобы облегчить жизнь тем, кто
столкнется с подобной проблемой в будущем. :-)

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "less и переменная с пробелами"  +/
Сообщение от Alting email(ok) on 14-Янв-11, 10:51 
>> Все, разобрался :)
> Тогда, пожалуйста, опишите здесь найденное решение, чтобы облегчить жизнь тем, кто
> столкнется с подобной проблемой в будущем. :-)

Вы знаете, если честно, то я не думаю, что кто-то еще будет так, извините, через попу сапоги надевать, как мне понадобилось.
Очень уж узкоспецифичная вещь...


Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "less и переменная с пробелами"  +/
Сообщение от DeadLoco (ok) on 15-Янв-11, 13:28 
Еще, из соображений эффективности, чем вызывать несколько грепов (это накладно), проще сделать сложный шаблон поиска. Сравните:

>  grep -v RIFF | grep -v WAVEfmt  grep -v ALCH | grep -v Avaya | grep -v data | grep -v fact
>  grep -v "RIFF|WAVEfmt|ALCH|Avaya|data|fact"

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

14. "less и переменная с пробелами"  +/
Сообщение от Alting email(ok) on 17-Янв-11, 08:15 
> Еще, из соображений эффективности, чем вызывать несколько грепов (это накладно), проще
> сделать сложный шаблон поиска. Сравните:
>>  grep -v RIFF | grep -v WAVEfmt  grep -v ALCH | grep -v Avaya | grep -v data | grep -v fact
>>  grep -v "RIFF|WAVEfmt|ALCH|Avaya|data|fact"

Согласен!
Скрипт в принципе очень сырой еще - нужно было срочно.
Теперь, как всегда, буду долизывать и оптимизировать.
Спасибо за предложение!

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру