The OpenNET Project / Index page

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

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

"Задан текстовый файл..."  +/
Сообщение от pavlick email on 02-Дек-09, 18:19 
Задан текстовый файл file.txt
Вывести статистику, в которой будет описано сколько раз встречаются в данном текстовом файле слова на каждую букву.
Пример: 5 слов на букву a, 0 слов на букву b, ..., 1 слово на букву z
Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

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


3. "Задан текстовый файл..."  +/
Сообщение от аноним on 02-Дек-09, 18:50 
>Задан текстовый файл file.txt
>Вывести статистику, в которой будет описано сколько раз встречаются в данном текстовом
>файле слова на каждую букву.
>Пример: 5 слов на букву a, 0 слов на букву b, ...,
>1 слово на букву z

Выведите статистику, я разрешаю.

man cut
man sort
man uniq

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Задан текстовый файл..."  +/
Сообщение от temny email(??) on 02-Дек-09, 21:55 
Вот, порадуй преподавателя:

$ 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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Задан текстовый файл..."  +/
Сообщение от аноним on 02-Дек-09, 22:14 
>Вот, порадуй преподавателя:

тонко :))

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Задан текстовый файл..."  +/
Сообщение от Andrey Mitrofanov on 03-Дек-09, 10:19 
>Вот, порадуй преподавателя:

Ндамс... Ну, теперь, когда мы школяру неинтересны, расскажите пожалуйста,

>$ 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-ами" что-то $) не так...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Задан текстовый файл..."  +/
Сообщение от pavlick email on 03-Дек-09, 11:49 
cat file | tr "[:upper:]" "[:lower:]"| sed 's/\s/\n/g' | egrep -o "^[a-z]" |sort| uniq -c

но! если в файле не встречаются слова на z, мы и не увидим

0 z

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Задан текстовый файл..."  +/
Сообщение от Andrey Mitrofanov on 03-Дек-09, 13:29 
ВНИМАНИЕ! Ужос-ужос-ужос впереди... Дэйв! ... Дэ-эйв!....

>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, мы и не
>увидим

Ну, я ж и написал -без "нулей"-. Добавить "нули" оставляю в качестве "упражнения читателю"(тм).

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "Задан текстовый файл..."  +/
Сообщение от аноним on 04-Дек-09, 04:48 
>но! если в файле не встречаются слова на z, мы и не
>увидим

Молодец, но все гораздо проще - ты не прочитал man cut.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Задан текстовый файл..."  +/
Сообщение от temny email(??) on 03-Дек-09, 17:35 
>>Вот, порадуй преподавателя:
>
>Ндамс... Ну, теперь, когда мы школяру неинтересны, расскажите пожалуйста,
>
>>$ 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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "Задан текстовый файл..."  +/
Сообщение от Andrey Mitrofanov on 03-Дек-09, 19:06 
>>>$ 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

Я тож, но :) перл-еры пока не купились на бейт.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

Индекс форумов | Темы | Пред. тема | След. тема




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

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