powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Помогите пжста новичку Shell-процедуре
25 сообщений из 34, страница 1 из 2
Помогите пжста новичку Shell-процедуре
    #34566295
Vladao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребят, привет! С Unix я на "Вы", поэтому прошу у вас помощи для дальнейшего его освоения
вместе с shell-программингом. Сделал пункты 1) 2), а вот 3) 4) - шляпа...:(( Помогите советом, кто
каким может. Спасибо!
Написать shell-процедуру, которая выполняет действия:
1)читает содержимое файла, передаваемого в качестве первого параметра;
2)создаёт новый файл, имя которого передаётся в качестве второго параметра;
3)выводит на экран каждые 7 сек очередную строку первого файла;
4)сортирует все выделенные на экран строки первого файла по длине и записывает их в новый файл;
при вводе с клавиатуры слова quit удаляет новый файл и завершате работу
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34566434
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не знаю, правильно ли я понял
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
!/bin/sh

fname1=$ 1 
fname2=$ 2 

bIFS=IFS
IFS="
"
set `cat $fname1`

for i in $*
do
 echo $i
 sleep  7 
done


for i in $*
do
 echo $i
done | awk '{arr[length($0)]=$0}END{for (i in arr){print i "separator" arr[i]}}' | sort -n -t xaxa + 1  |
 sed s/^[ 0 - 9 ]*separator// > $fname2

IFS=$bIFS

read a
[ "$a" = "quit" ] && {
rm $fname2
exit
}
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34566448
Фотография Ося
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 автор

не совсем понятно авторсортирует все выделенные на экран строки первого файла по длине и записывает их в новый файл;
при вводе с клавиатуры слова quit удаляет новый файл и завершате работу

что значит выделенные

2 null

у вас последовательное исполнение 3 и 4, мне каэца ,автор хотел параллельно...
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34566456
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladao wrote:

> 1)читает содержимое файла, передаваемого в качестве первого параметра;
cat файл_аргумент
> 2)создаёт новый файл, имя которого передаётся в качестве второго
cat файл_аргумент > новый_файл
3)выводит на экран каждые 7 сек очередную строку первого файла;
команды read, sleep

> 4)сортирует все выделенные на экран строки первого файла по длине и
sort

> записывает их в новый файл; при вводе с клавиатуры слова quit удаляет
> новый файл и завершате работу
непонятно.

можно почитать info bash.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34566828
Фотография Умаксуман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladaoРебят, привет! С Unix я на "Вы", поэтому прошу у вас помощи для дальнейшего его освоения
вместе с shell-программингом. Сделал пункты 1) 2), а вот 3) 4) - шляпа...:(( Помогите советом, кто
каким может. Спасибо!
Написать shell-процедуру, которая выполняет действия:
1)читает содержимое файла, передаваемого в качестве первого параметра;
2)создаёт новый файл, имя которого передаётся в качестве второго параметра;
3)выводит на экран каждые 7 сек очередную строку первого файла;
4)сортирует все выделенные на экран строки первого файла по длине и записывает их в новый файл;
при вводе с клавиатуры слова quit удаляет новый файл и завершате работу

- А Вы с компьютером на "Вы" или на "ты"?
- Я с ним на "иоптвоюмать"
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34568007
Vladao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Умаксуман
- А Вы с компьютером на "Вы" или на "ты"?
- Я с ним на "иоптвоюмать"
Умаксуман, я с компом, ну как это по-культурней выразиться...

ErV, вот сижу читаю info bash...

-null-, спасибо большое, что отозвался помочь, только поясни вот эту строчку:
awk '{arr[length($0)]=$0}END{for (i in arr){print i "separator" arr}}' | sort -n -t xaxa +1 |
sed s/^[0-9]*separator//

Спасибо всем:)
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34568092
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
этой строчкой я сортирую строки по длине.
Можно и по-другому придумать.

А вообще честно говоря задание мутно сформулировано, в том плане, что можно не однозначно понимать написанное (см. вопрос Оси)
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34568241
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, вот как в Unix Power Tools О'Релли сделана сортировка строк по длине (lensort)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
#!/bin/sh
awk 'BEGIN { FS=RS }
{ print length, $0 }' $* |
# Sort the lines numerically
sort +0n - 1  |
# Remove the length and the space and print each line
sed 's/^[0-9][0-9]* //'
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34568246
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так что я че-то перемудрил спросоня :)
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34568251
Vladao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--null--, покажи лучше как по-другому, можно ведь и через expr() и sort() сделать, просто объясни как с помощью них всё прально выполнить... Спасибо:)
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34568461
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladao wrote:

> ErV, вот сижу читаю info bash...
Ещё есть смысл системные скрипты почитать.

> -null-, спасибо большое, что отозвался помочь, только поясни вот эту
> строчку:
Это по пунктам - вызов awk, передача (значок трубы) результата его работы в
sort, передача результата работы sort в sed.
По всем трем есть мануалы. С awk'ом еще не общался, разобраться можно было
бы, но мне влом. Судя по всему там идет циклическая печать исходных
аргументов, которые представлены как массив (зы а что вы перл не
юзаете ?:)). "sed s/^[0-9]*separator//" удаляет из вывода сорт все строки
(пардон, выражения), которые соответствуют шаблону: начинаются с начала
строки, после чего идет произвольное число цифр ([0..+бесконечность)),
затем "separator".
опять же можно почитать маны по регэкспам, они должны быть в man 7 regex,
man perlre и man sed, по-любому ещё где-то описаны...

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34568599
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
получается что так.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
#!/bin/sh

fname1=$ 1 
fname2=$ 2 

bIFS=$IFS
IFS="
"
set `cat $fname1`

for i in $*
do
 echo $i
 sleep  7 
done


for i in $*
do
 echo $i
done | awk 'BEGIN { FS=RS } { print length, $0 }' $* | sort +0n - 1  | sed 's/^[0-9][0-9]* //' > $fname2

IFS=$bIFS

read a
[ "$a" = "quit" ] && {
rm $fname2
exit
}


ErV не perl, а awk, потому что товарищу на shell надо, а awk это все-таки unix utils

в случае perl сортировка конечно интеллигентнее получается

Код: plaintext
1.
2.
3.
4.
5.
6.
...
for i in $*
do
 echo $i
done   | perl -ne '@_=<>;print(sort {length($a)<=>length($b)} @_)' > $fname2
...
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34568680
Vladao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ося
что значит выделенные

Извеняюсь, конеш не выделенные, а выведенные

Ребят, а можно обойти все эти ухищрения наподобие awk и perl для сортирвки по длине
чем нибудь по-проще, просто мне это надо сделать в Korn/Bourne-shell...С помощью expr() и sort()
я всё это делаю в теории, а вот как это будет в практике...не знаююю...Помогите с практикой please
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34569030
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, что с awk самое оно. Вот и TOR в своей книжке советует, а он авторитет, как-никак
Дело в том, что sort не умеет сортировать по длине строк, насколько я знаю.
Посему придется извращаться всяко дело:
длину строки обычно можно узнать awk-ом, perl-ом или expr (и то не везде)
и дальше именно так действовать как в ранее приведенном.
Ещё некоторые версии команды test умеют сравнивать строки по длине - но тогда придется алгоритм сортировки писать.

да, можно без awk обойтись и вычислять expr-ом длину

Код: plaintext
1.
2.
3.
4.
for i in $*
do
 echo $i
done  | while read a; do echo `expr length "$a"`-$a ; done | sort -t- +0n  | sed s/[ 0 - 9 ]*-//

но мне это не нравится, ибо данная опция expr есть не во всех версиях.
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34569572
Vladao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--null-- , спасибо тебе за советы дельные:)
Подскажи, а можно строчки
bIFS=$IFS
IFS="
"
чем-то другим, более простым-понятным заменить?
А что вот это +0n в строчке sort значит?
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34569601
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladao wrote:

> Ребят, а можно обойти все эти ухищрения наподобие awk и perl для сортирвки
> по длине
По-моему на шелле можно забабахать обычную тупую процедуру сортировки. Т.е.
создать массив, считать туда строки, а потом его отсортировать так же, как
на любом другом языке программирования, ибо циклы на шелле пишутся без
проблем. Особых сложностей пока не вижу, разве что тормоза могут быть, если
сильно перезагнаться.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34569608
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, я что-то не пойму, или вы просто забыли о ключике -m у wc?
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34569663
Vladao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет:) У меня Korn-shell конструкцию
bIFS=$IFS
IFS="
"
не принимает...Что делать?? Она здесь обязательна? Посоветуйте альтернативу пжста
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34569684
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DocAlКоллеги, я что-то не пойму, или вы просто забыли о ключике -m у wc?
Хороший ключик. Но есть проблема: не везде он присутствует.

авторbash-2.05$ uname -v
FreeBSD 4.4-RELEASE #4:
bash-2.05$ echo hello | wc -m
wc: illegal option -- m
usage: wc [-clw] [file ...]

В линухе есть, в FreeBSD 6x есть.
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34569703
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
под ksh тоже работает - KSH v5.2.14
хотя его преимуществ не исполбзует - ориентирована на Bourne Shell
немного подсократил еще...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
#!/bin/ksh


fname1=$ 1 
fname2=$ 2 


bIFS=$IFS
IFS="
"
set `cat $fname1`

for i in $*
do
 echo $i
 sleep  7 
done



for i in $*
do
 echo $i
done |  awk '{print length($0)"-"$0}' | sort -t- + 0  -n | sed s/^[ 0 - 9 ]*-// > $fname2

IFS=$bIFS


read a
[ "$a" = "quit" ] && {
rm $fname2
exit
}
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34569764
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErV
Vladao wrote:

> Ребят, а можно обойти все эти ухищрения наподобие awk и perl для сортирвки
> по длине
По-моему на шелле можно забабахать обычную тупую процедуру сортировки. Т.е.
создать массив, считать туда строки, а потом его отсортировать так же, как
на любом другом языке программирования, ибо циклы на шелле пишутся без
проблем. Особых сложностей пока не вижу, разве что тормоза могут быть, если
сильно перезагнаться.
Posted via ActualForum NNTP Server 1.4


Специально для извращенцев - Korn Shell с пузырьковой сортировкой

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
#!/bin/ksh

fname1=$ 1 
fname2=$ 2 

bIFS=$IFS
IFS="
"
set -A arr `cat $fname1`
IFS=$bIFS



bubble()
{
i= 1 
while [ "$i" -ne "${#arr[*]}" ]
do
 let j=${#arr[*]}- 1 
 while [ "$j" -ge "$i" ]
  do
   let tmp_i=$j- 1 
   [ `echo "${arr[$tmp_i]}" | wc -c | sed -e "s/^ *//"` -gt `echo "${arr[$j]}" | wc -c | sed -e "s/^ *//"` ]  && {
    tmp=${arr[$tmp_i]}
    arr[tmp_i]=${arr[j]}
    arr[j]=$tmp
    }
    let j=--
  done
let i=++
done
}

i= 0 
while [ "$i" -ne "${#arr[*]}" ]
do
 echo ${arr[$i]}
 let i=++
 sleep  7 
done

bubble



i= 0 
while [ "$i" -ne "${#arr[*]}" ]
do
 echo ${arr[$i]}
 let i=++
done > $fname2


read a
[ "$a" = "quit" ] && {
rm $fname2
exit
}
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34569768
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladaoПодскажи, а можно строчки
bIFS=$IFS
IFS="
" чем-то другим, более простым-понятным заменить?
А что вот это +0n в строчке sort значит?


без IFS все будет намного скучнее.
Например, пришлось бы так заполнять массив в предыдущем примере

Код: plaintext
1.
2.
3.
4.
5.
6.
i= 0 
while read a
do
 arr[$i]=$a
 let i=++
done <$fname1
или аналогично псевдомассив $@, думаю, понятно как, но нафига всё это, ио есть IFS и set

А в sort +0n означает сортировать по полю номер 0, сравнивая как числа
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34569786
Vladao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--null-- , спасибо за альтернативу, полезная вещь, но буду впредь использовать IFS:)
Скучно не будет!:) А вот если мне проверить вводимые параметры, то использовать надо команду test?
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34569791
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну да. Проверить существование файла, из которго собираемся читать строки.
...
Рейтинг: 0 / 0
Помогите пжста новичку Shell-процедуре
    #34569894
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null-- DocAlКоллеги, я что-то не пойму, или вы просто забыли о ключике -m у wc?
Хороший ключик. Но есть проблема: не везде он присутствует.

авторbash-2.05$ uname -v
FreeBSD 4.4-RELEASE #4:
bash-2.05$ echo hello | wc -m
wc: illegal option -- m
usage: wc [-clw] [file ...]

В линухе есть, в FreeBSD 6x есть.Ну, для FreeBSD 4 и -с подойдёт. Там однобайтная кодировка.
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Помогите пжста новичку Shell-процедуре
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]