LINUX.ORG.RU

Bash, sed помощь новичку, добавление переменной

 , ,


0

2

Помогите подправить скрипт, не понимаю почему он не работает. Не воспринимает 10ю строчку обозначение ${f} Задача скрипта пробегаться по определенным строкам и в зависимости от строки делать в ней определенную замену. Обьясните где затуп

#!/bin/bash
for (( a = 1; a <= 3; a++ ))
do
let "b = a - 1"
let "c = b / 3"
let "d = c + 1"
e="win $d"
f="${a}s"
echo "$a, $b, $c, $d, $e, $f"
sed "${f}/la/${e}/" study.pdb > study_res.pdb
done



Последнее исправление: Hunter1302 (всего исправлений: 3)

Ничего у тебя не игнорируется, ты постоянно study_res.pdb перезаписываешь.

#!/bin/bash

cp study.pdb study_res.pdb

for (( a = 1; a <= 3; a++ )); do
  b=$(( a - 1 ))
  c=$(( b / 3 ))
  d=$(( c + 1 ))
  sed -i "${a}s/la/win ${d}/" study_res.pdb
done

Что за шаманство ты пытаешься провернуть с помощью b,c,d?

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Блин, ошибка прямо позорная какая то... Даже то, что я не программист, и что нормально не кодил уже года 3 не оправдывает:)

b, c, d, я просто разбил арифметические операции, чтобы проверить, что он все правильно считает. Это же тестовый скрипт, чтобы понять логику кода.

На деле у меня файл с координатами молекул, и там есть порядка 40к молекул воды, из за криво работающих программ которые все это моделируют, мне выходной файл в несколько не том формате вышел, мне надо подправить все строчки описывающие какой молекуле принадлежит атом и группу приписать (строчка - информация о конкретном атоме атом) поэтому, каждые 3 строчки я прибавляю 1 к нужному числу. (молекула воды H2O, и строчки идут в нужном порядке)

Спасибо огромное за помощь!!!))

Hunter1302
() автор топика
Ответ на: комментарий от WitcherGeralt

b=$(( a - 1 ))
c=$(( b / 3 ))
d=$(( c + 1 ))

Давно уже не надо скобочек при вычислениях.

declare -i a b c d 
for (( a = 1; a <= 3; a++ )); do
    b=a-1
    c=b/3
    d=c+1
Заодно можно и писать d=++c и так далее. Да, пробелы нельзя и скобочки надо экранировать, но оно не запрещает писать $(()) с дополнительными скобочками и самое главное — оно быстрее работает.

vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.