Em bash
e zsh
, use {01..30}
:
$ for i in {01..30}; do
echo $i
# other code using "$i"
done
01
02
03
04
05
06
(etc.)
Em ksh93
, use {0..30%02d}
.
Em sh
, ou qualquer outro shell POSIX, use
i=0
while [ "$(( i += 1 ))" -le 30 ]; do
zi=$( printf '%02d' "$i" )
echo "$zi"
# other code using "$zi"
done
Sua variável i
também precisa de citação:
for i in {01..30}; do
echo "$i"
grep "$i/Aug" access.log | sort -u | wc -l
done
Ou, alternativamente,
sed -E -n 's#^.*([0-9][0-9]/Aug).*$##p' access.log | sort | uniq -c
ou
grep -o '[0-9][0-9]/Aug' access.log | sort | uniq -c
Esse pipeline único (sem loop) produziria as datas correspondentes a 2-digit-number/Aug
e o número de entradas de log de acesso correspondentes a essa string de data.
Isso é feito extraindo toda a ocorrência de [0-9][0-9]/Aug
do arquivo, classificando-os e permitindo que uniq
conte quantas vezes cada um ocorre.
A variação grep
, embora indiscutivelmente mais agradável do que o comando sed
, fornecerá números muito grandes se a cadeia de data ocorrer várias vezes em uma linha.