Кто знает Unix Shell? , Нужно не большую программулину написать.

Автор темы Habis, 11.9.2013, 19:32

  • Авторизуйтесь для ответа в теме

#1 Habis

Habis

    Ветеран

  • Пользователи-2
  • *****
  • 2 076 cообщений
  •   3  
  • Offline
  • Карточка
  • ЛС

Сообщение добавлено 11.9.2013, 19:32

На языке unix shell написать программу, которая переводит имена подкаталогов текущего каталога в с английского на немецкий, используя словарь вида:
english<space>german
Словоформы не учитывать.

С unix shell не работал.
Подскажите пожалуйста.
My project 21о93
www.vaz.ee/forum/topic30782.html



#2 BN6

BN6

    Ваш Друг

  • Администрация
  • ***
  • 903 cообщений
  •   27  
  • Offline
  • Карточка
  • ЛС

Сообщение добавлено 11.9.2013, 22:09

* Цитата (Habis @ 11.9.2013, 19:32)

На языке unix shell написать программу, которая переводит имена подкаталогов текущего каталога в с английского на немецкий, используя словарь вида:
english<space>german
Словоформы не учитывать.

С unix shell не работал.
Подскажите пожалуйста.


А почему именно он ?
Может проще заюзать язык тот который знаешь, а шеллом только подставлять значение для перевода.
GSM: +372-51-33-013



#3 Habis

Habis

    Ветеран

  • Пользователи-2
  • *****
  • 2 076 cообщений
  •   3  
  • Offline
  • Карточка
  • ЛС

Сообщение добавлено 11.9.2013, 22:16

BN6, увы требования преподавателя...
My project 21о93
www.vaz.ee/forum/topic30782.html



#4 Pugnator

Pugnator

    /b/rony

  • Супермодераторы
  • *****
  • 13 416 cообщений
  •   45  
  • Offline
  • Карточка
  • ЛС

Сообщение добавлено 12.9.2013, 2:18

Ну давай попробуем, чистый bash.
Создаем файл словаря
Цитата
one ein
two zwei
three drei
four vier
five funf
six sechs
seven sieben
eight acht
nine neun
ten zehn


Теперь создадим англоименованные директории основываясь на словаре (словарь в файле dic)

Код
mkdir $(cut --delimiter=' ' -f 1 < dic)


В коде выше мы читаем файл построчно < dic
Бьем строку на части по разделителю - пробел --delimiter=' '
И берем первую часть -f 1

Директории есть, можно убедиться через ls

Теперь переименовываем все директории по словарю, если не находим - выводим ворнинг

Код

#!/bin/bash
for i in *; do
if [ -d "$i" ]; then
    if [ $i == $(grep $i dic | cut -d ' ' -f 1) ]; then
    mv $i $(grep $i dic | cut -d ' ' -f 2)
    else
    echo "The word $i wasn't found in the dictionary"
    fi
fi
done


Спасибо сказали: 3
Excuses are like assholes: everybody's got one



#5 Habis

Habis

    Ветеран

  • Пользователи-2
  • *****
  • 2 076 cообщений
  •   3  
  • Offline
  • Карточка
  • ЛС

Сообщение добавлено 12.9.2013, 11:02

Цитата
Теперь создадим англоименованные директории основываясь на словаре (словарь в файле dic)

Pugnator, данный файл dic, он локально хранится на диске? или в памяти крутится?
My project 21о93
www.vaz.ee/forum/topic30782.html



#6 BN6

BN6

    Ваш Друг

  • Администрация
  • ***
  • 903 cообщений
  •   27  
  • Offline
  • Карточка
  • ЛС

Сообщение добавлено 12.9.2013, 11:42

* Цитата (Habis @ 12.9.2013, 11:02)

Pugnator, данный файл dic, он локально хранится на диске? или в памяти крутится?


локально, запускай команду из той же папки где лежит файл или указывай полный путь к нему < /usr/home/dic
Спасибо сказали: 1
GSM: +372-51-33-013



#7 Pugnator

Pugnator

    /b/rony

  • Супермодераторы
  • *****
  • 13 416 cообщений
  •   45  
  • Offline
  • Карточка
  • ЛС

Сообщение добавлено 12.9.2013, 16:54

Код несколько неоптимизирован. Поиск по словарб идет дважды. На маленьких словарях (до 20МБ) будет ок и не заметно.
Можно работать в два раза быстрее, если парсинг словаря идет только один раз и результат заносится в переменную
Excuses are like assholes: everybody's got one



#8 Agassy

Agassy

    Мастер

  • Модераторы
  • ****
  • 1 525 cообщений
  •   35  
  • Offline
  • Карточка
  • ЛС

Сообщение добавлено 13.9.2013, 8:51

* Цитата (Pugnator @ 12.9.2013, 17:54)

...Можно работать в два раза быстрее, если парсинг словаря идет только один раз и результат заносится в переменную

"Длинная" переменная - должна вызвать утечку памяти или ошибаюсь?
Критерием истины - является практика ! (с)
---
Difficult we made yesterday impossible we are making now!



#9 Pugnator

Pugnator

    /b/rony

  • Супермодераторы
  • *****
  • 13 416 cообщений
  •   45  
  • Offline
  • Карточка
  • ЛС

Сообщение добавлено 13.9.2013, 10:27

* Цитата (Agassy @ 13.9.2013, 9:51)

"Длинная" переменная - должна вызвать утечку памяти или ошибаюсь?

Ну, во-первых, там будет храниться два слова плюс пробел; а во-вторых, bash имеет автоматический сборщик мусора.
Excuses are like assholes: everybody's got one



#10 Bosyak

Bosyak

    Ветеран

  • Пользователи-2
  • *****
  • 8 477 cообщений
  •   35  
  • Offline
  • Карточка
  • ЛС

Сообщение добавлено 13.9.2013, 10:29

* Цитата (Pugnator @ 13.9.2013, 17:27)

Ну, во-первых, там будет храниться два слова плюс пробел; а во-вторых, bash имеет автоматический сборщик мусора.




Кстати с днем программиста!!!! вы отмечаете праздник сегодня на 256 день)))
Спасибо сказали: 3
quattro в моде, при любой погоде :-)



#11 Agassy

Agassy

    Мастер

  • Модераторы
  • ****
  • 1 525 cообщений
  •   35  
  • Offline
  • Карточка
  • ЛС

Сообщение добавлено 13.9.2013, 10:38

* Цитата (Pugnator @ 13.9.2013, 11:27)

Ну, во-первых, там будет храниться два слова плюс пробел; а во-вторых, bash имеет автоматический сборщик мусора.

ок! просто в свое время сталкивался с такой проблемой в Perl. при анализе больших текстов, скрипт в конце концов вешал систему - по причине не хватки памяти.
Помогла статья Утечки памяти в программах на Perl
Критерием истины - является практика ! (с)
---
Difficult we made yesterday impossible we are making now!



#12 Habis

Habis

    Ветеран

  • Пользователи-2
  • *****
  • 2 076 cообщений
  •   3  
  • Offline
  • Карточка
  • ЛС

Сообщение добавлено 13.9.2013, 12:39

Agassy, там вообще ни какие ограничения не вводились?
My project 21о93
www.vaz.ee/forum/topic30782.html



#13 Agassy

Agassy

    Мастер

  • Модераторы
  • ****
  • 1 525 cообщений
  •   35  
  • Offline
  • Карточка
  • ЛС

Сообщение добавлено 13.9.2013, 13:05

* Цитата (Habis @ 13.9.2013, 13:39)

Agassy, там вообще ни какие ограничения не вводились?

сорри, не совсем понял суть вопроса.
Критерием истины - является практика ! (с)
---
Difficult we made yesterday impossible we are making now!



#14 Habis

Habis

    Ветеран

  • Пользователи-2
  • *****
  • 2 076 cообщений
  •   3  
  • Offline
  • Карточка
  • ЛС

Сообщение добавлено 13.9.2013, 13:13

* Цитата (Agassy @ 13.9.2013, 14:05)

сорри, не совсем понял суть вопроса.

Ограничения на использование памяти.
My project 21о93
www.vaz.ee/forum/topic30782.html



#15 Agassy

Agassy

    Мастер

  • Модераторы
  • ****
  • 1 525 cообщений
  •   35  
  • Offline
  • Карточка
  • ЛС

Сообщение добавлено 13.9.2013, 13:54

* Цитата (Habis @ 13.9.2013, 14:13)

Ограничения на использование памяти.

Нет, ограничений ни каких не было.

пс отыскался простенький перловый скрипт, на анализ существования строки (слова) в словаре, если подобная строка в словаре существует-ни чего не происходит, если отсутствует, то добвляем в конец словаря.
Может чем-нить пригодится...

($rf,$newwrd) = ($ARGV[0], $ARGV[1]);
# из комнд стр подается имя файла-словаря
# из комнд стр подается анализируемое слово

$rdy="C:\\!\\$rf";
print $newwrd,"\n";

open NW, "$rdy";
while ($line=<NW>) {
if ($newwrd eq $line)
{$coun+=1;}
close (NW);
}
if ($coun eq "")
#добавляем новое слово в словарь
{open (NW, "+>>$rdy");
print NW "\n",$newwrd;}
Критерием истины - является практика ! (с)
---
Difficult we made yesterday impossible we are making now!




  • Авторизуйтесь для ответа в теме

1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)