按文件中定义的次数打印变量(bash)

时间:2018-08-22 17:21:51

标签: bash shell loops awk

我有
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

但还不在那里。

3 个答案:

答案 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