O seguinte roteiro:
DYN_HOSTS_START_ARRAY=($(grep -E "STARTING HOST" sample.log | cut -d' ' -f 1,2))
for ((i=0; i< ${#DYN_HOSTS_START_ARRAY[@]}; i++))
do
echo "$i: start: "${DYN_HOSTS_START_ARRAY[$i]}""
done
Usando o seguinte arquivo sample.log:
2019-11-11 19:05:55,823 DEBUG STARTING HOST 46
2019-11-11 19:05:55,831 DEBUG STARTING HOST 703
2019-11-11 19:05:55,837 DEBUG STARTING HOST 505
2019-11-11 19:05:55,858 DEBUG STARTING HOST 93
2019-11-11 19:05:55,859 DEBUG STARTING HOST 486
2019-11-11 19:05:55,861 DEBUG STARTING HOST 72
2019-11-11 19:05:55,879 DEBUG STARTING HOST 855
2019-11-11 19:05:55,913 DEBUG STARTING HOST 560
2019-11-11 19:05:56,067 DEBUG STARTING HOST 199
Produz a seguinte saída indesejada:
0: start: 2019-11-11
1: start: 19:05:55,823
2: start: 2019-11-11
3: start: 19:05:55,831
4: start: 2019-11-11
5: start: 19:05:55,837
6: start: 2019-11-11
7: start: 19:05:55,858
8: start: 2019-11-11
9: start: 19:05:55,859
10: start: 2019-11-11
11: start: 19:05:55,861
12: start: 2019-11-11
13: start: 19:05:55,879
14: start: 2019-11-11
15: start: 19:05:55,913
16: start: 2019-11-11
17: start: 19:05:56,067
A saída desejada deve ter apenas 9 elementos (em vez de 18), cada elemento contendo a data e a hora, separados pelo espaço original.
Como faço para corrigir meu script, mantendo a inicialização do array, apenas para 9 elementos , para fazer isso?
com a entrada das impressões da pergunta
Para ter mais controle sobre a formatação de saída, você também pode usar
printf
assimA substituição de comandos tem algumas armadilhas com espaços em branco ou caracteres especiais. Aparentemente, os dois campos da entrada são salvos em elementos de array separados. Este script os combina com base em seu script original.
Você pode usar
mapfile -t
e ler seus dados de uma substituição de processo, como @Kusalananda apontou.Ou você pode alterar a
IFS
variável que é usada para divisão de palavras para um caractere de nova linha (o valor padrão é caractere de espaço, tabulação e nova linha) e alterá-lo de volta ao seu valor original posteriormente.Saída (ambas variantes):
Relacionado: