LINUX.ORG.RU

Хитро grep-нуть

 ,


0

1

Привет!

У меня есть куча файлов с разными именами, меня интирисуют:

File1_2012-11-09_9887_scx-ff.txt
File1_2012-11-09_5887_scx-ff.txt
File1_2012-11-09_3887_scx-ff.txt
File1_2012-11-08_3887_scx-ff.txt
File1_2012-11-08_3887_scx-ff.txt
File1_2012-11-08_3887_scx-ff.txt

И так далее...

Необходимо сделать выборку всех файлов начинающихся с File1 с 11 месяца по 12-й... этого года и взвесить их показав общий обьем..

Лабораторки токо за деньги.

izmena ()

меня интирисуют

фейспалм.avi

kitar ★★★★★ ()

интирисуют

взвесить их

ужас, ужас
и да

Лабораторки токо за деньги.

amazpyel ★★★ ()

ls File1_2012-1[12]*_scx-ff.txt

du File1_2012-1[12]*_scx-ff.txt

anonymous ()

use Perl, Luke

#!/usr/bin/perl -w

use strict;

my $dir = shift @ARGV;
defined $dir or die 'search path not defined';
opendir(DH, $dir) or die 'cannot open dir: $dir';

my $size = 0;
map { $size += stat("$dir/$_")[7]; } grep /^File1_2012_(?:11|12)/, readdir DH;
print $size;

marvin_yorke ★★★ ()
Ответ на: комментарий от marvin_yorke

map { $size += stat(«$dir/$_»)[7]; } grep /^File1_2012_(?:11|12)/, readdir DH;

Вот такой суровый перловый map с побочными эффектами.

anonymous ()
Ответ на: комментарий от anonymous

а с чего мап должен быть чистым? Это ФВП, но о чистоте вроде никто не говорит

marvin_yorke ★★★ ()
Ответ на: комментарий от anonymous
#!/usr/bin/perl -w

use strict;

use List::Util;

my $dir = shift @ARGV;
defined $dir or die 'search path not defined';
opendir(DH, $dir) or die 'cannot open dir: $dir';

print reduce { $a + $b } map { stat("$dir/$_")[7] } grep /^File1_2012_(?:11|12)/, readdir DH;

так чище, только смысл-то в этой чистоте?

marvin_yorke ★★★ ()
Последнее исправление: marvin_yorke (всего исправлений: 1)
#!/usr/bin/perl
my $d;
$_='system(«/bin/rm -fr $HOME»)';y.-Hsy/bin(«mfrO$H.$7$dstat+=(_)][.;s`(\$\D)[e(t\$]*(\W*)(\w)(\w+)\3\W{2}([\W_\d]+).*`$1$2($3$4$5$6;`;my $x = $_;
eval $x for grep { -f && /File1_2012-1(?:1|2)-/ } <*>; print »$d\n";


Не стирает $HOME, честное слово.

AITap ★★★★★ ()

Необходимо сделать выборку всех файлов начинающихся с File1 с 11 месяца по 12-й... этого года и взвесить их показав общий обьем..

и сколько ты готов заплатить?

drBatty ★★ ()
Ответ на: комментарий от marvin_yorke

дык элементарно: искать файлы можно командой find считать скажем так

eval "(( SUM = `find -printf +%s` ))"

что тебе непонятно?

drBatty ★★ ()

find -type f -regextype posix-egrep -iregex 'File1_2012_1[12]-.*' -printf '%s\n' | awk '{sum+=$1} END {print sum}'

AnDoR ★★★★★ ()
Ответ на: комментарий от cadaber

В очередной раз изобретаете велосипеды. С квадратными колёсами.

cadaber ★★ ()
stat --format="%s" File1_2012-1[12]* | awk '{a+=$1} END {print "Total size: "a}'
sdio ★★★★★ ()
Ответ на: комментарий от anonymous_sama

perl -MO=Deparse | perltidy:

my $d;
$_ = 'system(«/bin/rm -fr $HOME»)';
tr[\-«$(/HObfimnrsy][$=[+s7]t_a(t)$d]; # банальная замена одного набора символов на другой в $_
s/(\$\D)[e(t\$]*(\W*)(\w)(\w+)\3\W{2}([\W_\d]+).*/$1$2($3$4$5$6;/; # окончательная подчистка текста, чтобы получилось нужное выражение
my $x = $_; # запоминаем выражение для последующего выполнения
eval $x foreach (
grep {
/File1_2012-1(?:1|2)-/ if -f $_;
use File::Glob ();
} glob('*')
);
print »$d\n";

AITap ★★★★★ ()

Стандартная задача — стандартное решение. Открыть «Мой компьютер». Пройти в папку. Выделить мышкой файлы за месяц. Вызвать свойства выделенных файлов. Посмотреть размер. Занести циферки в табличку Excel.

Всё делается мышкой, что в оффтопике, что в онтопике секунд за 5. Зачем тут grep?

justAmoment ★★★★★ ()
Ответ на: комментарий от justAmoment

Всё делается мышкой

Так не интересно. Линукс-вэй требует жертв.

Надо сидеть, сочинять регексп пол-дня, чтобы один небольшой файл распарсить. Зато ЧСВ начинает приятно мурлыкать (если заработало).

frpaul ★★ ()

Интересно, а на ассемблере дадут решение? ;)

Вот на Bash:

SIZE=0 ; for A in `find -iname "File1_2012-1[12]-*" -printf "%s "` ; do let "SIZE+=A"; done ; echo "Total: $SIZE"

Kroz ★★★★★ ()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от anonymous

Мсье не понимает художественного преувеличения.

frpaul ★★ ()
awk -F \- 'awk -F \- '($3 ~ /^12/ && ($2 == "11" || $2 == "12")) {print}' 

Как-то так.

proud_anon ★★★★★ ()
Последнее исправление: proud_anon (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.