Bashスクリプトの動的変数の問題

Bashスクリプトの動的変数の問題

次の形式の.txtファイルを取得したいと思います。

chr1: 3
chr2: 3
chr3: 3

次のスクリプトを使用しますが、他のエラーが発生します。

#!/bin/bash
touch number_samples.txt
for i in {10..22}
do
    a="chr$i:"
    b='\t' 
    c=3
    d='\n' 
    e="$a$b$c$d"
    echo $e > number_samples.txt
done

注:c=3ツールの出力になります。c= tool query -l input.txt | wc -l つまり、数字(単語数)です。

どうすればいいですか?

答え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各反復でいくつかの変更を行うかどうかはわかりません。

Steeldriverが提案したようにc変更する予定がない場合は、ループなしでこれを実行できます。

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

関連情報