Eu sou novo em scripts de shell, então peço desculpas se isso foi perguntado antes.
Eu tenho um arquivo de coordenadas.txt assim:
765442
866447
755343
097754
Gostaria de passar cada valor de cada linha do arquivo para uma variável e usar esses valores um a um como entrada em uma linha de comando e salvar esse número em parte do nome do arquivo. Eu escrevi o seguinte código, mas não tenho certeza se este é o caminho correto a seguir ...
cat coordinates.txt | while read LINE; do
var="$(echo $LINE)"
/home/users/scripts/TreeView/TreeView.sh -o $NAME_ALL.chr1.new_estimate.trees.$var --bp_of_interest $var
done
então na saída -o cada valor um de cada vez é anexado ao nome do arquivo e cada valor também é usado como --bp_of_interest, um de cada vez
Qualquer sugestão muito apreciada. Obrigado
Seu loop é melhor escrito como
Isso altera o seguinte:
/home/users/scripts/TreeView
à frente de$PATH
. Isso nos permite chamarTreeView.sh
sem o caminho absoluto anexado a ele.var
variável, pois era exatamente o mesmo que o valor lido do arquivo de entrada.IFS= read -r line
porque " Entendendo "IFS= read -r line" ".cat
nesta instância simplesmente não é necessário.Outra maneira de fazer a mesma coisa:
Isso usa
xargs
para inserir os dados lidos de cada linhacoordinates.txt
nos argumentos doTreeView.sh
script nos locais indicados por{}
.Você pode até adicionar
-P n
àxargs
linha de comando (por exemplo, antes-I {}
de , onden
é algum número) para executar tantas instâncias paralelas do script de uma só vez, cada uma com os dados apropriados inseridos em sua linha de comando decoordinates.txt
.