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


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: bash, попарная перестановка символов  (Прочитано 2708 раз)

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

Оффлайн shift192

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
только начал заниматься bash'ем и столкнулся с проблемой при реализации.

собственно нужно реализовать такую штуку:
есть переменная А="0666947621"(к примеру) и нужно применить к ней перестановку.
перестановка: нужно поменять местами символы с шагом равным 2-м.
06 66 94 76 21
60 66 49 67 12
в итоге должно получиться В="6066496712"

кто может подсказать как это реализовать в баше?
п.с. если есть хороший источник по башу на русском тоже нужно.
заранее спасибо.
« Последнее редактирование: 01 Апреля 2012, 00:06:04 от shift192 »

Оффлайн Бумер

  • Активист
  • *
  • Сообщений: 996
  • Кто злой, я злой?О_о
    • Просмотр профиля

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: кто знает помогите(bash)
« Ответ #2 : 31 Марта 2012, 21:56:02 »
shift192, это для решения какой-то конкретной задачи, или просто так?

Оффлайн shift192

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: кто знает помогите(bash)
« Ответ #3 : 31 Марта 2012, 23:21:47 »
конкретная задача.
делаю скрипт sms в pdu формате.
мне дали аналогичный на питоне, но питон мной еще не воспринимается.
часть скрипта уже реализовал и он рабочий. осталось сделать действия указанные выше.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: кто знает помогите(bash)
« Ответ #4 : 31 Марта 2012, 23:56:31 »
Код: (bash) [Выделить]
$ L="0666947621" ; echo "$L" | while read -n2 C ; do echo -n "${C:1}${C::1}" ; done ; echo
6066496712

Переименуйте топик: "bash, попарная перестановка символов"

Оффлайн shift192

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: кто знает помогите(bash)
« Ответ #5 : 01 Апреля 2012, 00:04:36 »
то что мне надо сделать на делфи выглядит так:
Lng, i:  Integer;
  LRead, LText, LMes, LTel, ANum: String;
begin
  ANum := ASms.Number;
  if (Length(ANum) mod 2) = 1 then
    ANum := ANum + 'F';

  for i := 1 to Length(ANum) do
    if i mod 2 = 0 then
      LTel := LTel + ANum + ANum[i-1];

а вот препод требует на баше.

Пользователь решил продолжить мысль 01 Апреля 2012, 00:05:30:
Код: (bash) [Выделить]
$ L="0666947621" ; echo "$L" | while read -n2 C ; do echo -n "${C:1}${C::1}" ; done ; echo
6066496712

Переименуйте топик: "bash, попарная перестановка символов"
спасибо, сейчас проверю.

Пользователь решил продолжить мысль 01 Апреля 2012, 00:08:05:
почему я раньше баш не видел, оказалось намного проще чем в делфи  :idiot2:
« Последнее редактирование: 01 Апреля 2012, 00:08:05 от shift192 »

Оффлайн dmig

  • Старожил
  • *
  • Сообщений: 1668
    • Просмотр профиля
Re: кто знает помогите(bash)
« Ответ #6 : 01 Апреля 2012, 00:09:44 »
откройте man bash и найдите там раздел по работе со строками.
собсно, вас интересуют модификаторы (так это вроде зовётся) для работы со строками. подстроки получаются просто, но синтаксис я сейчас не вспомню. а циклы в баше ещё проще.

ЗЫ преподу большой респект!

Оффлайн shift192

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: bash, попарная перестановка символов
« Ответ #7 : 01 Апреля 2012, 00:20:03 »
спасибо, за ответы.
завтра буду проверять и постигать баш.
думаю, в ближайшее время появятся еще вопросы по реализации неких действий на баше.

andrey_p

  • Гость
Re: bash, попарная перестановка символов
« Ответ #8 : 01 Апреля 2012, 09:07:55 »
echo $A | sed -r 's/(.)(.)/\2\1/g'
6066496712

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: bash, попарная перестановка символов
« Ответ #9 : 01 Апреля 2012, 14:36:08 »
(Нажмите, чтобы показать/скрыть)

Оффлайн shift192

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: bash, попарная перестановка символов
« Ответ #10 : 02 Апреля 2012, 15:14:48 »
echo $A | sed -r 's/(.)(.)/\2\1/g'
6066496712
а как приравнять b к этому выражению echo $A | sed -r 's/(.)(.)/\2\1/g' ?
когда пишу echo $b выдает пустую строку.

andrey_p

  • Гость
Re: bash, попарная перестановка символов
« Ответ #11 : 02 Апреля 2012, 16:08:15 »
b=$(echo $A | sed -r 's/(.)(.)/\2\1/g')

Оффлайн shift192

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: bash, попарная перестановка символов
« Ответ #12 : 02 Апреля 2012, 17:01:50 »
b=$(echo $A | sed -r 's/(.)(.)/\2\1/g')
спасибо.

 

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