Я хочу добавить такую ​​строчку:

Var1 <- rbind(x1, x2, x3, x4, x5, x6)

В текстовый файл. Пользователь укажет числа. Если скрипт запущен как ./script.bash 2 7 текстовый файл должен иметь следующую строку:

Var1 <- rbind(x2, x3, x4, x5, x6, x7)

Вот что я пробовал до сих пор:

#!/bin/bash
beg=$1
last=$2
echo "Var1 <- rbind(???) " > output.txt

Есть ли простой способ сделать это с помощью bash?

0
wthimdh 5 Сен 2016 в 20:56

3 ответа

Лучший ответ

Вот что-то, построенное вокруг команды seq:

script.sh

#!/bin/bash
echo "var1 <- rbind(x"$(seq -s", x" $1 $2 )")" >> "output.txt"

seq arg1 arg2 создает последовательность чисел между arg1 и arg2, а аргумент -s позволяет нам указать используемую строку-разделитель.

Вывод, например, seq -s ", x" 1 7 равно 1, x2, x3, x4, x5, x6, x7, и мы объединяем их со строками констант var1 <- rbind(x и ).

2
Lars Fischer 5 Сен 2016 в 18:19

Думаю, это зависит от того, что вы бы назвали простым способом сделать это, но вот один вариант:

#!/bin/bash

beg=$1
end=$2

{
    printf 'Var1 <- rbind('
    for (( i = beg; i < end; ++i )); do 
        printf '%d, ' "$i"
    done
    printf '%d)\n' "$end"
} > output.txt

Прокрутите числа, добавляя запятые между ними. Перенаправить вывод блока в файл.

1
Tom Fenech 5 Сен 2016 в 18:07

Что-то вроде должно работать:

#!/bin/bash
first=$1
last=$2
(
  echo -n "Var1 <- rbind("
  for n in $(seq "$first" $((last-1))); do
      echo -n "x$n, "
  done
  echo "$last)"
) >> "output.txt"

Я использую цикл for для создания списка аргументов (т.е. xN). Весь цикл, а также два других оператора, печатающих префикс и суффикс строки, запускаются из подоболочки, которая перенаправляется в файл.

1
redneb 5 Сен 2016 в 18:05