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

Исходное сообщение
"шелловский grep в perl"

Отправлено visitor , 08-Дек-08 02:47 
Здравствуйте.
Помогите плиз сделать чтобы перл выгребал $ndate из $sfile, а не $month и $date.

вот строки из скрипта:
$ndate="$month $date";
system("grep \"$ndate\" $sfile >$gfile");

Заранее спасибо.


Содержание

Сообщения в этом обсуждении
"шелловский grep в perl"
Отправлено Pahanivo , 08-Дек-08 10:12 
>Здравствуйте.
>Помогите плиз сделать чтобы перл выгребал $ndate из $sfile, а не $month
>и $date.
>
>вот строки из скрипта:
>$ndate="$month $date";
>system("grep \"$ndate\" $sfile >$gfile");
>
>Заранее спасибо.

1) Юзать грип из перлы - это попахивает извращением )))
2) Че ты ему задаешь - то он и выгребает )))


"шелловский grep в perl"
Отправлено visitor , 08-Дек-08 10:51 
>[оверквотинг удален]
>>и $date.
>>
>>вот строки из скрипта:
>>$ndate="$month $date";
>>system("grep \"$ndate\" $sfile >$gfile");
>>
>>Заранее спасибо.
>
>1) Юзать грип из перлы - это попахивает извращением )))
>2) Че ты ему задаешь - то он и выгребает )))

ответь плиз по делу, если конечно есть что ответить.


"шелловский grep в perl"
Отправлено visitor , 08-Дек-08 10:56 
>Здравствуйте.
>Помогите плиз сделать чтобы перл выгребал $ndate из $sfile, а не $month
>и $date.
>
>вот строки из скрипта:
>$ndate="$month $date";
>system("grep \"$ndate\" $sfile >$gfile");
>
>Заранее спасибо.

мне все равно кто будет выгребать, перл своими командами или с помощью шелловского grep. главное выгребать из файла то, что задано в выражении "$month $date", а не по отдельности, потому что если grep воспринимает как рег. выражение.

Спасибо.


"шелловский grep в perl"
Отправлено shurick31 , 08-Дек-08 11:32 
>$ndate="$month $date";
>system("grep \"$ndate\" $sfile >$gfile");
>
>Заранее спасибо.

Попробовать можно так:
`grep "$ndate" $sfile > $gfile`;


"шелловский grep в perl"
Отправлено visitor , 08-Дек-08 11:39 
>>$ndate="$month $date";
>>system("grep \"$ndate\" $sfile >$gfile");
>>
>>Заранее спасибо.
>
>Попробовать можно так:
>`grep "$ndate" $sfile > $gfile`;

и так тоже пробовал :) эффект тот же... :(


"шелловский grep в perl"
Отправлено Andrey Mitrofanov , 08-Дек-08 11:47 
>тоже пробовал :) эффект тот же... :(

Не просветите ли, какой же?


"шелловский grep в perl"
Отправлено visitor , 08-Дек-08 12:47 
>>тоже пробовал :) эффект тот же... :(
>
>Не просветите ли, какой же?

да, конечно

bash-2.05b# cat file.txt
Mon Dec  1 10:49:40 2008
Mon Dec  1 10:49:43 2008
Mon Dec  2 10:49:45 2008
Mon Dec  3 10:51:10 2008
Mon Dec  3 10:51:40 2008
Mon Dec  3 10:52:10 2008
Mon Dec  7 10:54:20 2008
Mon Dec  7 10:55:30 2008
Mon Dec  7 10:56:30 2008
Mon Dec  8 10:57:10 2008
Mon Dec  8 10:58:15 2008
Mon Dec  8 10:58:12 2008

bash-2.05b# cat scr.pl
#!/usr/bin/perl

$d=`date -v -1d '+%h %d'`;
($month,$date) = split(/ /, $d);
$date=~s/0//g;

$sfile="file.txt";
$gfile="file.N.txt";

#$month="Dec";
#$date="7";

$ndate="$month  $date";
system("grep \"$ndate\" $sfile >$gfile");

нужно выгребать все записи за Dec  7. Скрипт выгребает все.
НО!!! если раскомментарить $month="Dec" и $date="7", то все работает хорошо.
где засада?

Спасибо.


"шелловский grep в perl"
Отправлено Andrey Mitrofanov , 08-Дек-08 12:57 
>то все работает хорошо.
>где засада?

Извините, я снова не понял -- так "всё работает хорошо" или где-то "засада"? :-O


"шелловский grep в perl"
Отправлено visitor , 08-Дек-08 13:17 
>>то все работает хорошо.
>>где засада?
>
>Извините, я снова не понял -- так "всё работает хорошо" или где-то
>"засада"? :-O

Где-то "засада" и похоже в строках где формируется дата, потому что когда присваиваешь значения переменным непосредственно ($month="Dec"; $date="7";), то все работает.

Т.е. когда делаю следующее:
$d=`date -v -1d '+%h %d'`;
($month,$date) = split(/ /, $d);
$date=~s/0//g;

print "$month  $date";

получаю то что нужно
Dec  7

НО, при объединении в единую переменную и последующем использовании в грепе - неработает :)

$ndate="$month  $date";
system("grep '$ndate' $sfile >$gfile");


"шелловский grep в perl"
Отправлено NuINu , 08-Дек-08 16:11 
>>>то все работает хорошо.
>>>где засада?

chomp $d;
my ($month,$date) = split(/ /, $d);


"шелловский grep в perl"
Отправлено NuINu , 08-Дек-08 13:21 
>>то все работает хорошо.
>>где засада?
>
>Извините, я снова не понял -- так "всё работает хорошо" или где-то
>"засада"? :-O

мне кажеться мы имеем здесь дело с телепатией!
скрипту на расстоянии должны внушаться параметры работы, но вот как это сделать автор топика пока не знает.


"шелловский grep в perl"
Отправлено phpcoder , 08-Дек-08 13:24 
>скрипту на расстоянии должны внушаться параметры работы, но вот как это сделать
>автор топика пока не знает.

Может libastral поможет? ;)


"шелловский grep в perl"
Отправлено visitor , 08-Дек-08 13:24 
>>>то все работает хорошо.
>>>где засада?
>>
>>Извините, я снова не понял -- так "всё работает хорошо" или где-то
>>"засада"? :-O
>
>мне кажеться мы имеем здесь дело с телепатией!
>скрипту на расстоянии должны внушаться параметры работы, но вот как это сделать
>автор топика пока не знает.

неужели я плохо объяснил в преидущих постах проблему? я думал понятно :)


"шелловский grep в perl"
Отправлено NuINu , 08-Дек-08 13:26 
>[оверквотинг удален]
>>>
>>>Извините, я снова не понял -- так "всё работает хорошо" или где-то
>>>"засада"? :-O
>>
>>мне кажеться мы имеем здесь дело с телепатией!
>>скрипту на расстоянии должны внушаться параметры работы, но вот как это сделать
>>автор топика пока не знает.
>
>неужели я плохо объяснил в преидущих постах проблему? я думал понятно :)
>

надо было сразу писать что у вас проблема с датой! тогда бы эта тема не разрослась на 30 постов. :)


"шелловский grep в perl"
Отправлено NuINu , 08-Дек-08 13:41 
>[оверквотинг удален]
>>>
>>>Извините, я снова не понял -- так "всё работает хорошо" или где-то
>>>"засада"? :-O
>>
>>мне кажеться мы имеем здесь дело с телепатией!
>>скрипту на расстоянии должны внушаться параметры работы, но вот как это сделать
>>автор топика пока не знает.
>
>неужели я плохо объяснил в преидущих постах проблему? я думал понятно :)
>

советую поставить пакет DateTime, и сделать все через него!

use DateTime;

my $d = DateTime->now();

$d->subtract( days=>1 );
print $d->month_abbr()." ".$d->mday()."\n";


"шелловский grep в perl"
Отправлено Andrey Mitrofanov , 08-Дек-08 13:16 
И почему-то мне мерещится FreeBSD... глюк, наверное.

>bash-2.05b# cat scr.pl
>#!/usr/bin/perl
>
>$d=`date -v -1d '+%h %d'`;

$ date -v -1d '+%h %d'
date: invalid option -- v
Попробуйте `date --help' для получения более подробного описания.
$ date -1d '+%h %d'
date: invalid option -- 1
Попробуйте `date --help' для получения более подробного описания.
$ date -d '+%h %d'
date: неверная дата `+%h %d'
$ date '+%h %d'
Дек 08
$ date '+%h %d' -1d
date: invalid option -- 1
Попробуйте `date --help' для получения более подробного описания.
$ date '+%h %d' \-1d
date: invalid option -- 1
Попробуйте `date --help' для получения более подробного описания.
$ date '+%h %d' "-1 day"
date: invalid option -- 1
Попробуйте `date --help' для получения более подробного описания.
$ date '+%h %d' -d "-1 day"
Дек 07
abm@abm:~$ LANG=C date '+%h %d' -d "-1 day"
Dec 07
$ _

Уф, показалось.

>($month,$date) = split(/ /, $d);
>$date=~s/0//g;
>
>$sfile="file.txt";
>$gfile="file.N.txt";
>
>#$month="Dec";
>#$date="7";
>
>$ndate="$month  $date";

Э-эгм,
$ndate=$d~s/ 0/  /;
не проще?

>system("grep \"$ndate\" $sfile >$gfile");

Сообщения об ошибках какие-нибудь?

system("grep \"$ndate\" $sfile >$gfile 2>./errors.txt");

>нужно выгребать все записи за Dec  7. Скрипт выгребает все.
>где засада?

Не знаю я перла -- может и поможет другой кто...


"шелловский grep в perl"
Отправлено visitor , 08-Дек-08 13:21 
>[оверквотинг удален]
>$ date '+%h %d' "-1 day"
>date: invalid option -- 1
>Попробуйте `date --help' для получения более подробного описания.
>$ date '+%h %d' -d "-1 day"
>Дек 07
>abm@abm:~$ LANG=C date '+%h %d' -d "-1 day"
>Dec 07
>$ _
>
>Уф, показалось.

вы используюте date под линухом. Они по разному работают в разных осях.



"шелловский grep в perl"
Отправлено vic , 08-Дек-08 15:07 
Используйте print на этапе отладке как можно чаще. Распечатывайте содержимое всех переменных, что у вас в итоге в переменных $month и $date? Что распечатается если строку отдаваемую в system() вывести на экран? Помните что system() неявно вызывает sh для обработки входной строки, что может влиять на интерпретацию строки.
Так легче вам искать места где что-то неправильно работает.

"шелловский grep в perl"
Отправлено visitor , 08-Дек-08 15:24 
>Используйте print на этапе отладке как можно чаще. Распечатывайте содержимое всех переменных,
>что у вас в итоге в переменных $month и $date? Что
>распечатается если строку отдаваемую в system() вывести на экран? Помните что
>system() неявно вызывает sh для обработки входной строки, что может влиять
>на интерпретацию строки.
>Так легче вам искать места где что-то неправильно работает.

спасибо за ответ.
именно так и делаю при отладке.

вот смотрите:

#!/usr/bin/perl

$d=`date -v -1d '+%h %d'`;
($month,$date) = split(/ /, $d);

#$month="Dec";
#$date="7";

$sfile="file.txt";
$gfile="file.N.txt";

print "$month";  
print "$date";  

$date=~s/0//g;
print "$date";

$ndate="$month  $date";
print "$ndate";

system("grep '$ndate' $sfile >$gfile");

на выходе получаю
Dec07
7
Dec  7

а также файл file.N.txt идентичный файлу file.txt :)


"шелловский grep в perl"
Отправлено vic , 08-Дек-08 16:46 
>system("grep '$ndate' $sfile >$gfile");

чего будет если напечатать:
print "grep '$ndate' $sfile >$gfile";
или
print "grep \"$ndate\" $sfile >$gfile";
?


"шелловский grep в perl"
Отправлено visitor , 08-Дек-08 18:59 
>>system("grep '$ndate' $sfile >$gfile");
>
>чего будет если напечатать:
>print "grep '$ndate' $sfile >$gfile";
>или
>print "grep \"$ndate\" $sfile >$gfile";
>?

то же самое на выходе что и во входном файле.
пофиг какие ковычки использовать.


"шелловский grep в perl"
Отправлено vic , 08-Дек-08 20:09 
>>>system("grep '$ndate' $sfile >$gfile");
>>
>>чего будет если напечатать:
>>print "grep '$ndate' $sfile >$gfile";
>>или
>>print "grep \"$ndate\" $sfile >$gfile";
>>?
>
>то же самое на выходе что и во входном файле.
>пофиг какие ковычки использовать.

м.., проверяем количество пробелов в выходном файле и количество пробелов в $ndate между месяцем и числом


"шелловский grep в perl"
Отправлено from_mars , 09-Дек-08 02:24 
попробуй вот так:

printf("Mon Dec  7 10:54:20 2008");
printf("Mon Dec  7 10:55:30 2008");
printf("Mon Dec  7 10:56:30 2008");


"шелловский grep в perl"
Отправлено phpcoder , 08-Дек-08 11:52 
>вот строки из скрипта:
>$ndate="$month $date";
>system("grep \"$ndate\" $sfile >$gfile");

Я бы попробовал

system("grep '$ndate' $sfile >$gfile");


"шелловский grep в perl"
Отправлено Pahanivo , 08-Дек-08 12:47 
>>вот строки из скрипта:
>>$ndate="$month $date";
>>system("grep \"$ndate\" $sfile >$gfile");
>
>Я бы попробовал
>
>system("grep '$ndate' $sfile >$gfile");

есть всетаки умные люди - которые представлют что делает команда )))
а автор видимо даже не пытался ее в консоли исполнить и понять что она делает )))


"шелловский grep в perl"
Отправлено visitor , 08-Дек-08 12:51 
>[оверквотинг удален]
>>>$ndate="$month $date";
>>>system("grep \"$ndate\" $sfile >$gfile");
>>
>>Я бы попробовал
>>
>>system("grep '$ndate' $sfile >$gfile");
>
>есть всетаки умные люди - которые представлют что делает команда )))
>а автор видимо даже не пытался ее в консоли исполнить и понять
>что она делает )))

прекращай срать в ветке, если нечего предложить


"шелловский grep в perl"
Отправлено Pahanivo , 08-Дек-08 13:04 
>[оверквотинг удален]
>>>
>>>Я бы попробовал
>>>
>>>system("grep '$ndate' $sfile >$gfile");
>>
>>есть всетаки умные люди - которые представлют что делает команда )))
>>а автор видимо даже не пытался ее в консоли исполнить и понять
>>что она делает )))
>
>прекращай срать в ветке, если нечего предложить

срешь ты  - я коментирую, не груби, да не послан будешь!
если для тебя ламера строки:
grep temp1 temp2 file
и
grep "temp1 temp2" file
единтичны, поздравляю! ты реально ламер!
man grep


"шелловский grep в perl"
Отправлено visitor , 08-Дек-08 13:10 
>[оверквотинг удален]
>>прекращай срать в ветке, если нечего предложить
>
>срешь ты  - я коментирую, не груби, да не послан будешь!
>
>если для тебя ламера строки:
>grep temp1 temp2 file

>grep "temp1 temp2" file
>единтичны, поздравляю! ты реально ламер!
>man grep

mopsiso в ветке ниже очень хорошо охарактеризовал таких людей как ты:) отдыхай короче.


"шелловский grep в perl"
Отправлено Pahanivo , 08-Дек-08 13:16 
>[оверквотинг удален]
>>
>>если для тебя ламера строки:
>>grep temp1 temp2 file
>>и
>>grep "temp1 temp2" file
>>единтичны, поздравляю! ты реально ламер!
>>man grep
>
>mopsiso в ветке ниже очень хорошо охарактеризовал таких людей как ты:) отдыхай
>короче.

как я? а чо я? у меня то по крайней мере хватает ума с grep разобраться ))))


"шелловский grep в perl"
Отправлено visitor , 08-Дек-08 13:22 
>[оверквотинг удален]
>>>и
>>>grep "temp1 temp2" file
>>>единтичны, поздравляю! ты реально ламер!
>>>man grep
>>
>>mopsiso в ветке ниже очень хорошо охарактеризовал таких людей как ты:) отдыхай
>>короче.
>
>как я? а чо я? у меня то по крайней мере хватает
>ума с grep разобраться ))))

никто ведь не сомневается в твоей гениальности :)


"шелловский grep в perl"
Отправлено Pahanivo , 08-Дек-08 14:12 
>[оверквотинг удален]
>>>>единтичны, поздравляю! ты реально ламер!
>>>>man grep
>>>
>>>mopsiso в ветке ниже очень хорошо охарактеризовал таких людей как ты:) отдыхай
>>>короче.
>>
>>как я? а чо я? у меня то по крайней мере хватает
>>ума с grep разобраться ))))
>
>никто ведь не сомневается в твоей гениальности :)

но разговор то про твою как раз )))))))))


"шелловский grep в perl"
Отправлено visitor , 08-Дек-08 14:36 
>[оверквотинг удален]
>>>>
>>>>mopsiso в ветке ниже очень хорошо охарактеризовал таких людей как ты:) отдыхай
>>>>короче.
>>>
>>>как я? а чо я? у меня то по крайней мере хватает
>>>ума с grep разобраться ))))
>>
>>никто ведь не сомневается в твоей гениальности :)
>
>но разговор то про твою как раз )))))))))

Слушай, да ты я смотрю в каждой ветке срешь, ой извини комментируешь :)))
не надоело? практически сплошной флуд. и хватает же времени и сил? просто поражаюсь... счастливчик...


"шелловский grep в perl"
Отправлено Pahanivo , 08-Дек-08 14:53 
>[оверквотинг удален]
>>>>ума с grep разобраться ))))
>>>
>>>никто ведь не сомневается в твоей гениальности :)
>>
>>но разговор то про твою как раз )))))))))
>
>Слушай, да ты я смотрю в каждой ветке срешь, ой извини комментируешь
>:)))
>не надоело? практически сплошной флуд. и хватает же времени и сил? просто
>поражаюсь... счастливчик...

каенчно хватает - я же разобрался с grep'ом )


"шелловский grep в perl"
Отправлено vic , 08-Дек-08 14:50 
>если для тебя ламера строки:
>grep temp1 temp2 file

>grep "temp1 temp2" file
>единтичны, поздравляю! ты реально ламер!
>man grep

man grep ни разу не поможет в понимании того как работают кавычки в шелле при передаче  параметров командной строки в запускаемую программу. В том числе и разницу между одинарными и двойными кавычками.
Тут следует изучать man bash, ну или какое-нить руководство по шеллу для новичков и не только.



"шелловский grep в perl"
Отправлено Pahanivo , 08-Дек-08 15:05 
>[оверквотинг удален]
>>и
>>grep "temp1 temp2" file
>>единтичны, поздравляю! ты реально ламер!
>>man grep
>
>man grep ни разу не поможет в понимании того как работают кавычки
>в шелле при передаче  параметров командной строки в запускаемую программу.
>В том числе и разницу между одинарными и двойными кавычками.
>Тут следует изучать man bash, ну или какое-нить руководство по шеллу для
>новичков и не только.

ошибаетесь уважаемый! еще как поможет!
man grep ... в первых строках
SYNOPSIS
       grep [options] PATTERN [FILE...]
       grep [options] [-e PATTERN | -f FILE] [FILE...]
по крайней мере имея даже очень скудные познания в sh/bash можно сообразить что второй параметр паттерна будет схаван грипом как имя файла ...
просто не привыкли люди работать головой, все делается по типу винды "yes" "no" "ignore".
То что есть четвертая и пятая, и другие кнопки никто не догодавыется, потому как не умеют ни читать ни думать. И увы, не вы, не я им не поможем ...


"шелловский grep в perl"
Отправлено visitor , 08-Дек-08 15:10 
>[оверквотинг удален]
>       grep [options] [-e PATTERN |
>-f FILE] [FILE...]
>по крайней мере имея даже очень скудные познания в sh/bash можно сообразить
>что второй параметр паттерна будет схаван грипом как имя файла ...
>
>просто не привыкли люди работать головой, все делается по типу винды "yes"
>"no" "ignore".
>То что есть четвертая и пятая, и другие кнопки никто не догодавыется,
>потому как не умеют ни читать ни думать. И увы, не
>вы, не я им не поможем ...

пример скрипта и текстового файла - я дал выше. покажи нам всем что ты умеешь не только языком чесать.


"шелловский grep в perl"
Отправлено Pahanivo , 08-Дек-08 16:51 
>пример скрипта и текстового файла - я дал выше. покажи нам всем
>что ты умеешь не только языком чесать.

гыгы ламерок решил на слабо взять? ок ) нелюблю я правдо это дело ... но фигли - скора новый год

bash-2.05b# cat file.txt
Mon Dec  1 10:49:40 2008
Mon Dec  1 10:49:43 2008
Mon Dec  2 10:49:45 2008
Mon Dec  3 10:51:10 2008
Mon Dec  3 10:51:40 2008
Mon Dec  3 10:52:10 2008
Mon Dec  7 10:54:20 2008
Mon Dec  7 10:55:30 2008
Mon Dec  7 10:56:30 2008
Mon Dec  8 10:57:10 2008
Mon Dec  8 10:58:15 2008
Mon Dec  8 10:58:12 2008

нужно выгребать все записи за Dec  7.

как два байта написать ...

awk '{if ($2 == "Dec" && $3 == 7) print $0}' data


"шелловский grep в perl"
Отправлено visitor , 08-Дек-08 18:56 
>[оверквотинг удален]
>Mon Dec  8 10:57:10 2008
>Mon Dec  8 10:58:15 2008
>Mon Dec  8 10:58:12 2008
>
>нужно выгребать все записи за Dec  7.
>
>как два байта написать ...
>
>awk '{if ($2 == "Dec" && $3 == 7) print $0}' data
>

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


"шелловский grep в perl"
Отправлено Pahanivo , 09-Дек-08 08:24 
>[оверквотинг удален]
>>
>>нужно выгребать все записи за Dec  7.
>>
>>как два байта написать ...
>>
>>awk '{if ($2 == "Dec" && $3 == 7) print $0}' data
>>
>
>угу, все с тобой ясно. повеселил:))) посмотрел хотя бы что требовалось-то. придурок
>конченный.

у ьы какой )) а где четкая формулировка задачи? ))
а то я кмо "чето както сделать" нихера не вижу ))


"шелловский grep в perl"
Отправлено vic , 08-Дек-08 15:11 
>
>ошибаетесь уважаемый! еще как поможет!
>man grep ... в первых строках
>SYNOPSIS
>       grep [options] PATTERN [FILE...]
>       grep [options] [-e PATTERN |
>-f FILE] [FILE...]
>по крайней мере имея даже очень скудные познания в sh/bash можно сообразить
>что второй параметр паттерна будет схаван грипом как имя файла ...

вот эти скудные познания и включают знание или хотя бы догадки о волшебных кавычках :)

>просто не привыкли люди работать головой, все делается по типу винды "yes"
>"no" "ignore".
>То что есть четвертая и пятая, и другие кнопки никто не догодавыется,
>потому как не умеют ни читать ни думать. И увы, не
>вы, не я им не поможем ...

но не стоит их отпугивать, нежнее надо, еще нежнее :))


"шелловский grep в perl"
Отправлено visitor , 08-Дек-08 12:52 
>>вот строки из скрипта:
>>$ndate="$month $date";
>>system("grep \"$ndate\" $sfile >$gfile");
>
>Я бы попробовал
>
>system("grep '$ndate' $sfile >$gfile");

пробовал и так тоже.
Резутьтат - выводит все записи из файла (см. выше).

Спасибо.


"шелловский grep в perl"
Отправлено visitor , 08-Дек-08 19:02 
>Здравствуйте.
>Помогите плиз сделать чтобы перл выгребал $ndate из $sfile, а не $month
>и $date.
>
>вот строки из скрипта:
>$ndate="$month $date";
>system("grep \"$ndate\" $sfile >$gfile");
>
>Заранее спасибо.

тема закрыта. воспользоваться советом NuINu.
Спасибо.


"шелловский grep в perl"
Отправлено NuINu , 09-Дек-08 08:40 
>[оверквотинг удален]
>>и $date.
>>
>>вот строки из скрипта:
>>$ndate="$month $date";
>>system("grep \"$ndate\" $sfile >$gfile");
>>
>>Заранее спасибо.
>
>тема закрыта. воспользоваться советом NuINu.
>Спасибо.

бывает. ;)  у меня сколько раз такое было.
я тогда уж уточню совет vic-а
так вот. я печатаю не просто переменные
а еще заключаю их в кавычки.
тогда стразу видно, что не так.