- Задан текстовый файл..., аноним, 18:50 , 02-Дек-09 (3)
>Задан текстовый файл file.txt >Вывести статистику, в которой будет описано сколько раз встречаются в данном текстовом >файле слова на каждую букву. >Пример: 5 слов на букву a, 0 слов на букву b, ..., >1 слово на букву z Выведите статистику, я разрешаю. man cut man sort man uniq
- Задан текстовый файл..., temny, 21:55 , 02-Дек-09 (6)
Вот, порадуй преподавателя:
$ dmesg > file.txt $ f=`cat file.txt`;for i in {a..z};do q=`echo \ $f|sed 's! ['$i${i^^}'][^ ]*!^!g;s![^^]!!g'`;echo $i: ${#q}; done a: 175 b: 27 c: 101 d: 64 e: 74 f: 43 g: 8 h: 14 i: 74 j: 2 k: 4 l: 13 m: 39 n: 12 o: 103 p: 159 q: 5 r: 68 s: 61 t: 37 u: 136 v: 23 w: 13 x: 1 y: 0 z: 3
- Задан текстовый файл..., аноним, 22:14 , 02-Дек-09 (7)
>Вот, порадуй преподавателя: тонко :))
- Задан текстовый файл..., Andrey Mitrofanov, 10:19 , 03-Дек-09 (8)
>Вот, порадуй преподавателя: Ндамс... Ну, теперь, когда мы школяру неинтересны, расскажите пожалуйста, >$ dmesg > file.txt >$ f=`cat file.txt` а файл >128К? а >1M? а с символами $, !, <, > и т.п.?? >;for i in {a..z} Гм, богато... Спасибо! ...man bash -- каждый раз что-то новое |) >;do q=` Аналогично, если слов >N={128k,1M,...}, то каменный цветок не пролезет? >echo \ $f >|sed 's! ['$i${i^^}'][^ ]*!^!g;s![^^]!!g'`;echo ${i^^} - это на каком шеле? и "предупреждать надо"(тм) Меня б "sed -i" спас :), но я б с самого начала по-другому сделал. >$i: ${#q}; done >a: 175 Маловато и медленновато будет! Если без "нулей", то $ pwd /usr/share/doc/exim4 $ ls -l spec.txt.gz -rw-r--r-- 1 root root 414956 2006-07-31 18:19 spec.txt.gz $ zcat spec.txt.gz|head|grep evisio |Revision 4.63 |27 July 2006 |PH | $ time zcat spec.txt.gz |wc -c 1435340 real 0m0.066s user 0m0.040s sys 0m0.024s $ time ( zcat spec.txt.gz |egrep -o "[a-z][^ ]+"|egrep -o "^[a-z]"|tr [:upper:] [:lower:]|sort|uniq -c|sort -k2 ) 64605 a 11846 b 30114 c 36166 d 124868 e 21642 f 15230 g 39851 h 72815 i 507 j 3668 k 35602 l 24757 m 63988 n 66860 o 21156 p 1722 q 58303 r 75325 s 86732 t 25755 u 8803 v 9243 w 5696 x 12582 y 569 z real 0m16.397s user 0m15.517s sys 0m0.816s $ _ Чего-то моментальненько... Ждём варианта на %) перле -- в три раза короче и в 10 раз быстрее. |-) С бенчмарками!! PS: И да, что-то подсказывает %)))) мне, что c "двумя grep-ами" что-то $) не так...
- Задан текстовый файл..., pavlick, 11:49 , 03-Дек-09 (9)
cat file | tr "[:upper:]" "[:lower:]"| sed 's/\s/\n/g' | egrep -o "^[a-z]" |sort| uniq -cно! если в файле не встречаются слова на z, мы и не увидим 0 z
- Задан текстовый файл..., Andrey Mitrofanov, 13:29 , 03-Дек-09 (10)
ВНИМАНИЕ! Ужос-ужос-ужос впереди... Дэйв! ... Дэ-эйв!....>cat file | tr "[:upper:]" "[:lower:]"| sed 's/\s/\n/g' | egrep -o "^[a-z]" |sed -n 's/\([a-z]\)[a-z]*[^a-z]*/\l\1\n/i;t 1;d;:1 P;D' ВАРНИНГ: это GNU sed. ВАРНИНГ2: а оно работает? %) _Я_ предупредил.... >|sort| uniq -c >но! если в файле не встречаются слова на z, мы и не >увидим Ну, я ж и написал -без "нулей"-. Добавить "нули" оставляю в качестве "упражнения читателю"(тм).
- Задан текстовый файл..., аноним, 04:48 , 04-Дек-09 (13)
>но! если в файле не встречаются слова на z, мы и не >увидим Молодец, но все гораздо проще - ты не прочитал man cut.
- Задан текстовый файл..., temny, 17:35 , 03-Дек-09 (11)
>>Вот, порадуй преподавателя: > >Ндамс... Ну, теперь, когда мы школяру неинтересны, расскажите пожалуйста, > >>$ dmesg > file.txt >>$ f=`cat file.txt` > >а файл >128К? а >1M? а с символами $, !, <, > и т.п.??Длинные файлы будут обрабатываться существенно медленнее, чем в предложеном вами решении, но всё-таки будут :) А вот как могут навредить спецсимволы я пока не вижу, во всяком случае вариант (dmesg ; echo $'!asd!\n >> <\n$$asd\n!$') > file.txt отработал без ошибок и с верной статистикой. >${i^^} - это на каком шеле? и "предупреждать надо"(тм) $ i=AbC; echo $i - ${i^^} - $BASH_VERSION AbC - ABC - 4.0.35(0)-release >Меня б "sed -i" спас :), но я б с самого начала >по-другому сделал. В реализациях sed, которые я нахожу в зоне прямой видимости, -i это "edit files in place", но я думаю понял, что вы имели в виду :) - Согласен, вместо ${i^^} можно использовать "case insensetive regex". >$ time zcat spec.txt.gz |wc -c >1435340 >$ time ( zcat spec.txt.gz |egrep -o "[a-z][^ ]+"|egrep -o "^[a-z]"|tr [:upper:] >[:lower:]|sort|uniq -c|sort -k2 ) > 64605 a ... >real 0m16.397s >user 0m15.517s >sys 0m0.816s >$ _ > >Чего-то моментальненько... > >Ждём варианта на %) перле -- в три раза короче и в >10 раз быстрее. |-) С бенчмарками!! Перла я не знаю, но могу предложить вот такой вариант на awk - не короче, но быстрее: $ time ( a=`echo {a..z}`;echo `head -c 1435340 /usr/local/info/mysql.info`|awk 'BEGIN{RS=" ";FS="";r="'${a// }'";split(r,a,"");} /^[a-zA-Z]/ {q[index(r,tolower($1))]++}END{for(i=1;i<=length(r);i++) printf "%s: %d\n",a[i],q[i];}' ) a: 36506 b: 13008 c: 16351 d: 29531 e: 6163 f: 31214 g: 9718 h: 9949 i: 27468 j: 5505 k: 21601 l: 16672 m: 69568 n: 20985 o: 19223 p: 23766 q: 5697 r: 22148 s: 41965 t: 48941 u: 20232 v: 12933 w: 49770 x: 138 y: 8012 z: 124 real 0m4.396s user 0m2.830s sys 0m1.101s
- Задан текстовый файл..., Andrey Mitrofanov, 19:06 , 03-Дек-09 (12)
>>>$ dmesg > file.txt >>>$ f=`cat file.txt` >> >>а файл >128К? а >1M? а с символами $, !, <, > и т.п.?? > >Длинные файлы будут обрабатываться существенно медленнее, чем в предложеном вами решении, но >всё-таки будут :) Действительно... Когда-то давно, помнится(+склерозз) наступал на грабли с ограничением макс.длины ком.строки в ~128К или 100К -- перепутал чего-то (с багом в xargs-е? ограничения MS-DOS-а в ??К?! %-D ). >А вот как могут навредить спецсимволы я пока не вижу, во всяком >случае вариант $ for f in {a..z}{a..z}{a..Z}; do cat 7676-13^01 ; done >file.txt $ f=`cat file.txt` $ ls -l file.txt -rw-r--r-- 1 abm abm 15499328 Дек 3 18:46 file.txt $ echo "$f"|wc -c 15499328 $ echo $f|wc -c 15126176 $ _ Ну, на вскидку патч Бармина в .txt не "кладётся", только "небольшая" разница в показаниях... И совсем не в строке с _q=`_, а c _echo \ $f_ -- не в спортлото, а в карты, да. :( >>${i^^} - это на каком шеле? и "предупреждать надо"(тм) > >$ i=AbC; echo $i - ${i^^} - $BASH_VERSION >AbC - ABC - 4.0.35(0)-release "Я что-то пропустил?!" :)) $ i=AbC; echo $i - ${i^^} - $BASH_VERSION bash: ${i^^}: bad substitution $ echo $BASH_VERSION 3.2.39(1)-release >В реализациях sed, которые я нахожу в зоне прямой видимости, -i это >"case insensetive regex". :/ grep -i попутал с sed s///i >>real 0m16.397s >>Чего-то моментальненько... s/ .\+ь/-то не момоменталь/ >>в три раза короче и в 10 раз быстрее. >Перла я не знаю, но могу предложить вот такой вариант на awk Я тож, но :) перл-еры пока не купились на бейт.
|