我有
scaffold_$i
,其中i in {1..3015}
以及制表符分隔的文件(temp
),该文件具有3015个值(每行一个):
2
3
1
5
...
我必须按照文件第一行所示多次打印第一项scaffold_1,这里是2,打印3次第二项scaffold_2,第三次打印六次,依此类推。所以,我有:
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
但还不在那里。
答案 0 :(得分:2)
我假设您实际上要打印$ scaffold_1等的值
使用bash可以做到
BusId Count of Fair>=5 Count of Fair>=10
abc1 2 1
abc2 1 0
abc3 1 0
abc4 0 0
或者,对于最新的bash版本,请使用“ nameref”
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
n=0
while read count; do
((n++))
declare -n ref="scaffold_$n"
for i in $(seq "$count"); do echo "$ref"; done
done < temp
但是,看到3000个带编号的变量名称很痛苦。使用数组
foo
foo
bar
bar
bar
foobar
qux
qux
qux
qux
qux
答案 1 :(得分:1)
最好使用awk
:
awk '{a[NR] = $1} END {
for (i=1; i <= length(a); i++)
for (j=1; j <= a[i]; j++)
print "scaffold_" i
}' file
scaffold_1
scaffold_1
scaffold_2
scaffold_2
scaffold_2
scaffold_3
scaffold_4
scaffold_4
scaffold_4
scaffold_4
scaffold_4
答案 2 :(得分:1)
另一个极简主义者awk
$ awk '{while($1--) print "scaffold_"NR}' file
scaffold_1
scaffold_1
scaffold_2
scaffold_2
scaffold_2
scaffold_3
scaffold_4
scaffold_4
scaffold_4
scaffold_4
scaffold_4