我想获得以下格式的 .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