проблема с динамической переменной в скрипте bash

mount /dev/sda /mnt

смонтирует устройство «sda» в каталоге «dev», содержащем файлы устройств, в каталог mnt, который является подходящей точкой монтирования для устройств. если он говорит, что разрешение отклонено или что-то еще, добавьте «sudo» перед командой выше.

0
27.06.2019, 19:11
1 ответ

Вы можете использовать подстановку команд для замены вывода команды.

Что-то вроде:

c=$(tool query -l input.txt | wc -l)

Однако ваш текущий код перезаписывает файл при каждой итерации цикла, так как вы используете >. Чтобы добавить в файл, вы должны использовать >>.

Кроме того, все ваши переменные кажутся ненужными, и нет никакой реальной причины touchсначала использовать файл. Вы должны сделать это с помощью:

#!/bin/bash
for i in {10..22}
do
    printf '%s\t%s\n' "chr${i}:" "$(tool query -l input.txt | wc -l)" >> number_samples.txt
done

Или, если вы хотите, чтобы файл был заполнен только данными из этого цикла, а любые потенциально существующие данные были стерты, вы можете просто записать вывод цикла в файл с помощью:

#!/bin/bash
for i in {10..22}
do
    printf '%s\t%s\n' "chr${i}:" "$(tool query -l input.txt | wc -l)" 
done > number_samples.txt

Хотя вывод tool query -l input.txt | wc -lбудет одинаковым для каждой итерации, поэтому я не уверен, собираетесь ли вы что-то менять input.txtна каждой итерации?

Как предполагает Стилдрайвер, если cне предназначено для изменения, вы можете выполнить это, не требуя цикла:

c=$(tool query -l input.txt | wc -l)
printf "chr%d\t$c\n" {10..22} > number_samples.txt
2
28.01.2020, 02:30

Теги

Похожие вопросы