Я хочу добавить такую строчку:
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?
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
и )
.
Думаю, это зависит от того, что вы бы назвали простым способом сделать это, но вот один вариант:
#!/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
Прокрутите числа, добавляя запятые между ними. Перенаправить вывод блока в файл.
Что-то вроде должно работать:
#!/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
). Весь цикл, а также два других оператора, печатающих префикс и суффикс строки, запускаются из подоболочки, которая перенаправляется в файл.
Похожие вопросы
Новые вопросы
bash
Этот тег предназначен для вопросов о сценариях, написанных для командной оболочки Bash. Сценарии оболочки с синтаксисом или другими ошибками, пожалуйста, проверьте их на https://shellcheck.net, прежде чем публиковать здесь. Вопросы об интерактивном использовании Bash, скорее всего, будут актуальны на Unix & Linux Stack Exchange или Super User, чем на Stack Overflow.