O loop de Bash é extremamente lento no seu caso:
> cat test-1.sh
#!/bin/sh
i=0
a='fixedstring1'
b='fixedstring2'
while [ $i -lt ${1:-9} ]; do
ur="$a""$b""$i"
echo $ur
(( i++ ))
done
> time sh test-1.sh 999999 | wc -l
...
real 1m11.488s
E usar jot
(ou seq
) torna isso muito mais rápido:
> cat test-3.sh
#!/bin/sh
a='fixedstring1'
b='fixedstring2'
jot -w "$a$b" ${1:-9}
# seq -f "$a$b%g" ${1:-9}
> time sh test-3.sh 999999 | wc -l
...
real 0m0.613s
E qual é a lógica de dividir números para arquivar? Se for um número limitado de linhas, você pode usar o comando split
(agora eu quero dizer GNU split
devido ao uso da opção -d
):
sh test-3.sh | split -d -l "how much lines in one file" - expr1/file