Модераторы: powerfox, ZeeLax
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подстановка в выражение с помощью sed 
V
    Опции темы
Kosya4ok
Дата 21.11.2007, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 23.7.2007

Репутация: нет
Всего: нет



Всем привет!
У меня возникла следующая проблема. У меня есть файл Fe.in5.1

Код

    5000000           0            0      
           0     5000000           0               
           0           0     5000000    
  

Хотелось бы заменить элемент (1.1 это 5000000), (1,2 это 0 и т.д.), (2.1). (2.2), (3.1), (3.2) на значения xn1="0" (1.1), yn1="5000000"(1.2 и т.д), xn2="5000000", yn2="5000000", xn3="-5000000", yn3="5000000", соотвественно.
Для этого пишу следующее.

Модератор: Используйте пожалуйста тэг "код" для файлов, логов и скриптов
Код

#!/bin/bash
NZ="2"
i="1"
compaund="Fe"

while [ $i -lt $NZ ]
do
x1=`head -n 1 $compaund.in5.$i | tail -n 1 | gawk '{printf "%10d ",$1}'` 
y1=`head -n 1 $compaund.in5.$i |tail -n 1| gawk '{printf "%10d ",$2}'`

x2=`head -n 2 $compaund.in5.$i |tail -n 1| gawk '{printf "%10d ",$1}'`
y2=`head -n 2 $compaund.in5.$i |tail -n 1| gawk '{printf "%10d ",$2}'`

x3=`head -n 3 $compaund.in5.$i |tail -n 1| gawk '{printf "%10d ",$1}'`
y3=`head -n 3 $compaund.in5.$i |tail -n 1| gawk '{printf "%10d ",$2}'`

xn1="0"
yn1="5000000"
xn2="5000000"
yn2="5000000"
xn3="-5000000"
yn3="5000000"

cp $compaund.in5.$i .tmp1

sed "1,1s/$x1/$xn1/" .tmp1 | sed "1,2s/$y1/$yn1/" > .tmp2
cp .tmp2 .tmp1

sed "2,1s/$x2/$xn2/" .tmp1 | sed "2,2s/$y2/$yn2/" > .tmp2
cp .tmp2 .tmp1

sed "3,3s/$x3/$xn3/" .tmp1 | sed "1,2s/$y3/$yn3/" > .tmp2
cp .tmp2 .tmp1
cp .tmp1 $compaund.in5.$i 
i=$[$i+1]
done

Но sed делает не то что требуется  smile . Помогите пожалуста разобраться  smile 

Это сообщение отредактировал(а) nickless - 21.11.2007, 23:35
PM MAIL   Вверх
nickless
Дата 21.11.2007, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 41
Всего: 181



Kosya4ok, а не проще ли создать новый файл с нужными элементами?
Тогда достаточно удалить первые 2 столбца и заменить их нужными числами...


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
Бонифаций
Дата 22.11.2007, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 9
Всего: 40



нет необходимости использовать sed тут.. Разумнее ed


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Kosya4ok
Дата 28.11.2007, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 23.7.2007

Репутация: нет
Всего: нет



Разумнее ed? А можно посмотреть на ваш пример с использованием ed?
PM MAIL   Вверх
Kosya4ok
Дата 10.12.2007, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 23.7.2007

Репутация: нет
Всего: нет



Всем привет!
Проблема разюзена мной собственно!  smile 

А вот и сам кодец
Код

#!/bin/bash
NZ="52"
i="1"
compaund="Fe"
while [ $i -lt $NZ ]
do
cp $compaund.in5.$i .tmp1
head -n 1 .tmp1 | gawk '{print " 0        " " 5000000        " $3 "        10000000"}' > .tmp2
head -n 2 .tmp1 | tail -n 1 | gawk '{print " 5000000 " "  5000000        " $3 "        10000000"}' >> .tmp2
head -n 3 .tmp1 | tail -n 1 | gawk '{print "-5000000 " "  5000000        " $3 "  10000000"}' >> .tmp2
tail -n 6 .tmp1 >> .tmp2
cp .tmp2 $compaund.in5.$i 
echo $i
i=$[$i+1]
done
rm .tmp1
rm .tmp2

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Oбщие вопросы"
nickless
Imple
nerezus

В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
Например вопросы о выборе ОС для определенных задач (но если Вы просто хотите узнать "Какой дистрибутив лучше", то для этого есть Клуб юнуксоидов).
Общие вопросы по shell-программированию тоже лучше задавать здесь.


  • Вопросы мобильной разработки тут
  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0625 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.