URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8976
[ Назад ]

Исходное сообщение
"less и переменная с пробелами"

Отправлено Alting , 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


Содержание

Сообщения в этом обсуждении
"less и переменная с пробелами"
Отправлено vg , 23-Дек-10 09:40 
кавычки, двойные - "$string"

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


"less и переменная с пробелами"
Отправлено Alting , 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 строк?



"less и переменная с пробелами"
Отправлено Alting , 23-Дек-10 13:08 
>> кавычки, двойные - "$string"
>> а если вместо less использовать head/tail ?
>
> Как вывести less первые n строк?

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


"less и переменная с пробелами"
Отправлено allez , 23-Дек-10 13:43 
>> Как вывести less первые n строк?
> туплю... -N конечно же..

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


"less и переменная с пробелами"
Отправлено Alting , 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
ну и так далее.

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


"less и переменная с пробелами"
Отправлено allez , 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

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


"less и переменная с пробелами"
Отправлено Alting , 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 часов, но его нужно запускать разово для первичного наполнения (или восстановления в случае косяков) базы.
Потом достаточно парсить суточные записи.
Спасибо Вам огромное!


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

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


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

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



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

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


"less и переменная с пробелами"
Отправлено allez , 13-Янв-11 18:09 
> Все, разобрался :)

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


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

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



"less и переменная с пробелами"
Отправлено DeadLoco , 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"


"less и переменная с пробелами"
Отправлено Alting , 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"

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