UNIX, shell процедура

ОТВЕТИТЬ НОВАЯ ТЕМА
Фефочка 24 мая 2006 в 12:26
Приколист  •  На сайте 20 лет
Сообщений: 346
0
ЯПовцы, есть ли среди вас люди шарящие в UNIX?
Мне нужно написать процедурку, но я кой-чего не знаю, к примеру как считывать из файлы по две строки (причем с конца) и как завершить работу процедуры при троекратном вводе слова end.

Вот сопстна само задание:
Написать shell-процедуру, которая выполняет действия:
- читает содержимое файла, имя которого передается в качестве параметра;
- создает новый файл, имя которого передается в качестве параметра;
- выводит на экран каждые 6 секунд очередные 2 строки файла в обратном порядке;
- сортирует выведенные на экран строки по длине и записывает их в новый файл;
- при вводе с клавиатуры трижды слова end удаляет второй файл и завершает работу.

Если кто-нибудь сможет помочь хотя бы советом, буду благодарна.
Yap 26.08.2026 - 19:41
Продам слона  •  На сайте 21 год
Все комментарии:
StealtH 24 мая 2006 в 13:36
Йобнутый сисодмин  •  На сайте 21 год
0
Цитата (Фефочка @ 24.05.2006 - 13:26)
- сортирует выведенные на экран строки по длине и записывает их в новый файл;

Шо курят аффтары таких заданий я не знаю, но реально такой shell-скрипт пишется в течении часа, щас попробую чо-то подобное наваять
Фефочка автор 24 мая 2006 в 13:59
Приколист  •  На сайте 20 лет
0
StealtH
заранее спасибо, я думала ты уже не придешь lalala.gif
у миня крыша поехала после попытки использования функции tail dead.gif

Это сообщение отредактировал Фефочка - 24 мая 2006 в 14:02
STREKOZA 24 мая 2006 в 14:32
Гость  • 
0
StealtH
МОЗГ
Romanian 24 мая 2006 в 14:33
Гость  • 
0
ниасилил патамушта УНИКС!
StealtH 24 мая 2006 в 14:36
Йобнутый сисодмин  •  На сайте 21 год
0
Цитата

#Читаем содержимое файла и сразыже сортируем в обратном порядке, ключ сортировки - первый знак в новой строке
in_file=`cat $1 |sort -r`
#Создаем новый файл
touch $2
#Инициализируем счетчик выводимых строк
counter=
for i in $in_file
do

  if [ $counter = 2 ]
    then
      sleep(6)
      counter=0
    else
      echo -e "$i"
      counter=$counter+1
  fi
done

Это так, на вскидку первые 3 пункта задания, остальное в гугле rulez.gif

ЗЫ: str_len=${#str} - подсчет длины строки при построчном выводе пхайла

Единственное что непонятно в данном техзадании - последний пункт, когда должен происходить ввод слова end после выполнения всего скрипта или во время его исполнения? upset.gif и собстна не понятно откуда берется это файл, и что он собой прицтавляит, если это логи и нужен их анализ, то тут лучше всего это делать через awk-скрипты, если просто файлы то можно через bash, все зависит от специфика задания
DAZ 24 мая 2006 в 14:39
старатильный кашак  •  На сайте 21 год
0
Хуясссе!!! Фефочка, нах тибе Уних??? ohmy.gif
STREKOZA 24 мая 2006 в 14:40
Гость  • 
0
ОЙ, ЙЕЕЕЕЕООООООООООООООО
Фефка, ты поняла???? я - нет....
мозги.....
StealtH 24 мая 2006 в 14:42
Йобнутый сисодмин  •  На сайте 21 год
0
Цитата (Фефочка @ 24.05.2006 - 14:59)
у миня крыша поехала после попытки использования функции tail dead.gif

Кстати эту задачу можно решить одной строкой и с помощью tail'a

Код
tail -n 2 -s 6 --pid=process_pid  | sort -r -n >/path/to/your/output_file.txt


по ключам команды man tail там доходчиво написано, или на http://opennet.ru в разделе манов

Добавлено в 14:45
STREKOZA получает лемит за оффтоп и радостное восшищение мозгами.

Думаю это ее сподвигнет на такой жуткий подвег как ЧТЕНИЕ ПРАВИЛ ПХОРУМА
STREKOZA 24 мая 2006 в 14:47
Гость  • 
0
ой ой ой cry.gif
Фефочка автор 24 мая 2006 в 14:49
Приколист  •  На сайте 20 лет
0
а в выражении

for i in $in_file

i это что?
Harder 25 мая 2006 в 09:43
Псих  •  На сайте 21 год
0
стопудово можно так-же через AWK реализовать
Фефочка автор 30 мая 2006 в 13:28
Приколист  •  На сайте 20 лет
0
После долгого мучения я написала процедуру по заданию изложеному выще, может кому пригодится smile.gif

Код
echo "Vvedite imya novogo faila"
read f2
f1=$1
{
while read a
do
echo `expr length "$a"`:$a
done < $f1
} | sort -t: -n | cut -d: -f2 > $f2
echo "fail make..."
cnt=`wc -l < $f1`
i=0
b=0
e="_"
while [ $i -le $cnt ]
do
head -`expr $cnt - $i` $f1 | tail -2
i=`expr $i + 2`
read -t 6 e
if test $e = "end"
then
 b=`expr $b + 1`
fi
if [ $b -eq 3 ]
then
 rm $f2
 exit
fi
e="_"
done
Фефочка автор 31 мая 2006 в 09:14
Приколист  •  На сайте 20 лет
0
Доработаный вариант с проверками:
Код

if [ "$#" -lt 1 ]
then
echo "Ne ukazan vhodnoi parametr (fail)"
exit
else
if test -f $1
then
 echo "Vvedite imya novogo faila"
 read f2
 if test -z "$f2"
 then
  echo "Imya faila ne mojet byt' pustym"
  exit
 else
  f1=$1
  {
  while read a
  do
   echo `expr length "$a"`:$a
  done < $f1
  } | sort -t: -n | cut -d: -f2 > $f2
  echo "fail make..."
  cnt=`wc -l < $f1`
  i=0
  b=0
  e="_"
  while [ $i -le $cnt ]
  do
   head -`expr $cnt - $i` $f1 | tail -2
   i=`expr $i + 2`
   read -t 6 e
   if test -z "$e"
   then
    e=""
   else
    if test $e = "end"
    then
     b=`expr $b + 1`
    fi
    if [ $b -eq 3 ]
    then
     rm $f2
     exit
    fi
    e=""
   fi
  done
 fi
else
 echo "Vhodnoi parametr ne fail"
fi
fi


StealtH 1 июн 2006 в 07:47
Йобнутый сисодмин  •  На сайте 21 год
0
Цитата (Фефочка @ 31.05.2006 - 10:14)
Доработаный вариант с проверками:
Код

if [ "$#" -lt 1 ]
then
echo "Ne ukazan vhodnoi parametr (fail)"
exit
else
if test -f $1
then
 echo "Vvedite imya novogo faila"
 read f2
 if test -z "$f2"
 then
  echo "Imya faila ne mojet byt' pustym"
  exit
 else
  f1=$1
  {
  while read a
  do
   echo `expr length "$a"`:$a
  done < $f1
  } | sort -t: -n | cut -d: -f2 > $f2
  echo "fail make..."
  cnt=`wc -l < $f1`
  i=0
  b=0
  e="_"
  while [ $i -le $cnt ]
  do
   head -`expr $cnt - $i` $f1 | tail -2
   i=`expr $i + 2`
   read -t 6 e
   if test -z "$e"
   then
    e=""
   else
    if test $e = "end"
    then
     b=`expr $b + 1`
    fi
    if [ $b -eq 3 ]
    then
     rm $f2
     exit
    fi
    e=""
   fi
  done
 fi
else
 echo "Vhodnoi parametr ne fail"
fi
fi

грамотный код, риспект agree.gif
Понравился пост? Ещё больше интересного в ЯП-Телеграм и ЯП-Max!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) Просмотры темы: 1 975
0 Пользователей:
ОТВЕТИТЬ НОВАЯ ТЕМА

 
 

Активные темы



Наверх