Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Небольшой shell скрипт  (Прочитано 2099 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн PeoneEr

  • Автор темы
  • Любитель
  • *
  • Сообщений: 91
  • О_О
    • Просмотр профиля
Небольшой shell скрипт
« : 29 Марта 2013, 17:38:13 »
Доброго времени суток. Помогите, пожалуйста, с написанием простого shell скрипта, который меняет в указанном файле четные и нечетные строки местами. Смотрю в сторону sed, но толком пользоваться я им не умею, а скрипт нужен срочно. Собственно, поэтому и обращаюсь за помощью.

Оффлайн vselax

  • Активист
  • *
  • Сообщений: 309
    • Просмотр профиля
Re: Небольшой shell скрипт
« Ответ #1 : 29 Марта 2013, 18:56:21 »
Легко!
(Нажмите, чтобы показать/скрыть)
В общем так. Только вывод скрипта перенаправьте куда надо.

Оффлайн PeoneEr

  • Автор темы
  • Любитель
  • *
  • Сообщений: 91
  • О_О
    • Просмотр профиля
Re: Небольшой shell скрипт
« Ответ #2 : 29 Марта 2013, 18:57:58 »
Хорошо, это не проблема :) Спасибо!

Виноват, полностью вопрос должен стоять так:
Разработать программу, которая изменяет текстовый файл, меняет местами четные и нечетные строки.
Если взять Вашу программу, то в принципе, к ней можно прикрутить запись в другой файл. Сейчас займусь. Если есть еще варианты, можете предложить :)
« Последнее редактирование: 29 Марта 2013, 19:06:16 от PeoneEr »

Оффлайн vselax

  • Активист
  • *
  • Сообщений: 309
    • Просмотр профиля
Re: Небольшой shell скрипт
« Ответ #3 : 29 Марта 2013, 19:17:47 »
Перенаправьте вывод во временный файл, затем удалите исходный, затем переименуйте временный.

Оффлайн Vitsliputsli

  • Старожил
  • *
  • Сообщений: 1293
    • Просмотр профиля
Re: Небольшой shell скрипт
« Ответ #4 : 29 Марта 2013, 19:26:55 »
с помощью sed:
sed 'N; s/\([^\n]*\)\n\(.*\)/\2\n\1/g'

Оффлайн PeoneEr

  • Автор темы
  • Любитель
  • *
  • Сообщений: 91
  • О_О
    • Просмотр профиля
Re: Небольшой shell скрипт
« Ответ #5 : 29 Марта 2013, 19:43:38 »
vselax,
Ваш вариант я сделал, он работает, спорить не стану. Но вариант товарища Vitsliputsli, с sed, кажется интересней. Есть одна проблема. Если сделать напрямую:
root@pink-rabbit:~/123# cat tst.txt | sed 'N; s/\([^\n]*\)\n\(.*\)/\2\n\1/g'
1
2
3
4
5
6
7
8
9
10
То выводится все нормально. Если это оформить в виде скрипта:
#!/bin/sh
read filename
echo `cat $filename | sed 'N; s/\([^\n]*\)\n\(.*\)/\2\n\1/g'`> $filename
то в файл все записывается строкой. Как этого избежать, а сделать так, что бы запись шла так же в столбец?
P.S. я знаю, что под рутом сидеть плохо. это тестовый сервер, так что ничего страшного.

Хотя, я нашел выход. Спасибо за ответы, господа. Действительно помогли :)
« Последнее редактирование: 29 Марта 2013, 19:50:56 от PeoneEr »

Оффлайн Vitsliputsli

  • Старожил
  • *
  • Сообщений: 1293
    • Просмотр профиля
Re: Небольшой shell скрипт
« Ответ #6 : 29 Марта 2013, 19:52:41 »
Цитировать
echo `cat $filename | sed 'N; s/\([^\n]*\)\n\(.*\)/\2\n\1/g'`> $filename
sed -i 'N; s/\([^\n]*\)\n\(.*\)/\2\n\1/' $filename

Оффлайн PeoneEr

  • Автор темы
  • Любитель
  • *
  • Сообщений: 91
  • О_О
    • Просмотр профиля
Re: Небольшой shell скрипт
« Ответ #7 : 29 Марта 2013, 19:54:58 »
Еще раз спасибо. Ваш вариант еще проще, чем то, что я придумал.

 

Страница сгенерирована за 0.018 секунд. Запросов: 21.