bash - 根据文件中定义的次数打印变量(bash)
问题描述
我有
scaffold_$i
wherei in {1..3015}
和一个制表符分隔的文件 ( temp
),有 3015 个值(每行一个):
2
3
1
5
...
我必须按照文件第一行所示的次数打印第一项scaffold_1,这里是2,打印第二项scaffold_2 3 次,第三项6 次,依此类推。所以,我有:
scaffold_1
scaffold_1
scaffold_2
scaffold_2
scaffold_2
scaffold_3
scaffold_4
scaffold_4
scaffold_4
scaffold_4
scaffold_4
...
我已经得到:
for i in {1..3};do for j in 'cat temp'; do printf 'scaffold_'$i'\n'%.0s {1..$j}; done; done
但还没有。
解决方案
我假设您实际上想要打印 $scaffold_1 的值等
使用 bash 你会做
scaffold_1=foo
scaffold_2=bar
scaffold_3=foobar
scaffold_4=qux
n=0
while read count; do
((n++))
var="scaffold_$n"
for i in $(seq "$count"); do echo "${!var}"; done
done < temp
或者,对于最近的 bash 版本,使用“nameref”
n=0
while read count; do
((n++))
declare -n ref="scaffold_$n"
for i in $(seq "$count"); do echo "$ref"; done
done < temp
foo
foo
bar
bar
bar
foobar
qux
qux
qux
qux
qux
但是,看到 3000 个编号的变量名是很痛苦的。使用数组
scaffold=(
foo
bar
foobar
qux
)
n=0
while read count; do
for i in $(seq "$count"); do echo "${scaffold[n]}"; done
((n++))
done < temp
推荐阅读
- javascript - Gulp.watch 刷新我的浏览器一次,但之后不再刷新
- r - 循环 | 情节菜单
- prometheus - 普罗米修斯计数和总和指标超过 pushgateway 的重启
- oracle - Orcale 行为与左外连接或条件
- python - 检查帖子被调用的次数
- c - C 中奇怪的代码行为,同时使用注释代码的某个不相关部分会影响输出的指针
- java - Oracle 错误代码 [17004] java.time.Instant 的列类型无效
- reactjs - 在我的应用程序中实现状态的正确方法是什么
- genetic-algorithm - 在遗传算法初始化中设置正确的解决方案
- java - Microsoft SQL Server 不存储 Base64 编码字符串的完整值