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

相关内容