Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Shell]Объясните на моем примере


Автор: xStorm 17.1.2008, 11:41
Для заданного текстового файла составить список всех слов, входящих в этот текст, и подсчитать количество вхождений каждого слова. Результат выдать в порядке убывания количества вхождений.
Код

#!/bin/bash

# Проверим наличие введенных параметров
if [ "$1" = "" ]; then
  echo "Вы не указали обрабатываемый файл. Правильный формат: lab3 file"
  exit 0
fi

# Считаем кол-во вхождений слов
list=$(cat $1)

trueList=`for word in $list
do
  echo $word
done`

list=$(echo "$trueList" | sort| uniq --count | sort -r)

# Счетчик
count=1

# Выводим информацию о результатах подсчета слов в файле
for word in $list
do
  if [[ $((count%2)) = 0 ]]; then
    echo " "$word
  else
    echo -n $word
  fi
 
  count=$((++count));
done

Я плохо разбираюсь в этом. У меня есть задание и решение к нему, пожалуйста помогите разобраться что тут происходит. Ну конечно есть сходство с бэт файлами, с ними я более или менее разбираюсь. Самое непонятное для меня начинается после строчки # Считаем кол-во вхождений слов
Особенно не понятна строчка list=$(echo "$trueList" | sort| uniq --count | sort -r) Что акое uniq --count??
Пожалуйста кто разбирается в shell помогите, буду очень благодарен!!

Автор: t_gran 22.1.2008, 10:06
xStorm, команда uniq удаляет дублирующиеся строки из отсортированного файла (потока). 
--count или просто -c - учитываются только появления, непосредственно предшествующие рассматриваемой строки.

Код

list=$(echo "$trueList" | sort| uniq --count | sort -r)


Содержимое $trueList -> сортировать -> удалить лишнее -> обратный порядок сортировки. Всё это загоняем в list

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)