LINUX.ORG.RU

Помощь студенту

 ,


0

2

Пишу скрипт, который должен вывести список файлов из директории, в которой содержится определенный текст. На вход дано: имя директории и текст. Man’ы по grep и find прочитаны, но не принесли успеха.



Последнее исправление: Novichokgermany (всего исправлений: 1)
#!/usr/bin/ruby

directory = ARGV[0]
text = ARGV[1]

Dir[File.join(directory, "*")].each do |filename|
  puts filename if File.read(filename) =~ /#{text}/
end
avsej
()

Man’ы по grep и find прочитаны, но не принесли успеха.

Показывай код и что пытался делать.

wandrien ★★
()

Давай скрипт, посмотрим в чем проблема.

ya-betmen ★★★★★
()
Ответ на: удаленный комментарий

Там grep-а достаточно.

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

Первое — как я понял, скринт должен быть на bash или т.п. Второе — зачем таким помогать? Когда это домашний пользователь — это одно, он имеет право не знать и не уметь. Но это студент! У него задача учиться.

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

Он и не помог.)

Хотя если ТС умудрится сдать ruby вместо grep-а, то точно будет руководителем.

wandrien ★★
()
Ответ на: комментарий от Vsevolod-linuxoid

Когда это домашний пользователь — это одно

В job?

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

Держит руку на пульсе, до эскалации осталось три, два…

chenbr0
()

Студент — изволь учить. Или зачем учишься на тех. специальность?

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

Ты пойми, здесь такие вопросы, как ты написал, очень не любят. Потому что лоботрясов и бестолочей вообще никто нигде не любит. Покажи конкретно код скрипта, который ты уже должен был написать, и мы тебе намекнем почему он не работает. А пока твои ответы про то, что ты что-то там пробовал никого не волнуют.

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

Скрипт никому ничего не должен, не за это ли боролся столман? А, d09?

Дай ссылку на драму. Скрипт-то как раз должен вроде как.

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

Дядь, написать один греп в терминале - это не скрипт. Тебе выше накидали кучу вопросов на которые ты не ответил.

С использованием какого языка нужен скрипт? С? Питон? Баш? Метапрог?

Как должен запускаться скрипт?

Ответь и пойдем дальше.

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

Скрипт на баш. Запускается через терминал вшитый в stepik, как там и что, я хз, единственное знаю, что тест через stdin.

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

Скрипт на баш.

Уже хорошо.

Ты имеешь представление как написать самый примитивный скрипт?

Накидай для начала скрипт который просто выводит список файлов в заданой директории. Код выложи сюда. Потом доработаем. Сможешь?

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

С написанием скриптов все очень плохо. В основном ищу уже готовые куски.

Пару раз использовал такой скрипт для вывода файлов:

for entry in «$search_dir»/* do echo «$entry» done

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

На, держи, изучай. Потрать 15 минут на обучение, уже сможешь написать примитивный скрипт после этого.

Обучись, напиши «рыбу» скрипта и выложи. Потом пойдем дальше.

Oberstserj ★★
()

Ладно уж, держи, горемыка.

Сохрани в файл, запускай bash <имя файла> <каталог> <текст для поиска>

#!/bin/bash

DIR="$1";
PATTERN="$2";

declare -a raw_files;
declare -a filtered_files;
declare -a result_files;

I=0;
dot() {
    C=$(expr $I % 100);
    echo -ne '\r';
    for (( c=1; c<$C; c++ )); do
        echo -n '.';
    done
    echo -n '*';
    for (( c=$C+1; c<=100; c++ )); do
        echo -n '.';
    done
    ((I++));
}
reset() {
    echo -ne '\r';
    for (( c=1; c<=100; c++ )); do
        echo -n '.';
    done
}

list_files() {
    A=$1;
    if [ "x$A" == "x" ]; then
         A="$(dirname "$DIR")";
    fi
    if [ -d "$A" ]; then
        for FILE in "$A"/*; do            
            list_files "$FILE";
        done
    else
        raw_files+=("$A");
        dot;
    fi
}

val=100;

echo "Sobiraem fayli";
list_files;
reset;

echo;
echo "Ishem stroku '$PATTERN' ";
for FILE in "${raw_files[@]}"; do 
    dot;
    LINES=$(cat "$FILE" 2>/dev/null | grep -i "$PATTERN" | wc -l);
    if [ "x$LINES" != "x0" ]; then        
        filtered_files+=("$FILE");        
    fi     
done
for FILE in "${filtered_files[@]}"; do 
    dot;
    if [[ "$FILE" = "$DIR"* ]]; then
        result_files+=("$FILE");
    fi
done

reset;
echo;

echo "stroka '$PATTERN' naidena v faylax:";
for FILE in "${result_files[@]}"; do
    echo "$FILE";
done

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

Я не про это. Зачем вместо ссылок на обучение давать готовый рецепт? Чем ты ему помог? Его препод первым же вопросом завалит.

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

не помогло

Как справка по использованию команды может не помочь?))

Oberstserj ★★
()
Ответ на: комментарий от ya-betmen

Спасибо за помощь) Однако скрипт упал на первом тесте. Мне кажется, задание выполняется более упрощенной версией

Novichokgermany
() автор топика
Ответ на: комментарий от ya-betmen

Если бы я сам знал, то методом переборов решил бы задачу и не писал сюда)

Novichokgermany
() автор топика
Ответ на: комментарий от fernandos

И он это заслужит, если не станет учить.

О том и речь. Ладно, посмотрим, выложит он щас «рыбу» или нет.

Oberstserj ★★
()
Ответ на: комментарий от ya-betmen

Так-то похоже, но не в каждом же новом регистранте подвох искать?)

Oberstserj ★★
()

Я удивлён, что никто не предложил обфусцированный патч Бармина.

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

всего исправлений: 3

А всё равно плохо. Там не нужен ни awk, ни sort, ни uniq.

pinus_nigra
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.