Encontre a diferença entre duas épocas que estão no nome do arquivo

1

Eu tenho um monte de buckets (diretórios) do Splunk que contêm dois timestamps de época em seus nomes. Eu preciso encontrar uma maneira de encontrar um encontrar esses nomes de arquivos para localizar quaisquer arquivos cuja data de segunda época é entre 1488344400 (1 de março de 2017) e 1497499200 (15 de junho de 2017). O formato do nome do arquivo é o seguinte:

db_1274129994_1273525194_0 (db_latesttime_earliesttime_idnum)

O "primeiro horário" é o fator determinante, pois o mais recente pode se estender além das datas.

    
por J Telep 20.09.2017 / 17:37

3 respostas

2

Usando bash :

for d in db_*_*_*; do
    if [[ "$d" =~ db_([0-9]*)_([0-9]*) ]]; then
        if [[ "${BASH_REMATCH[2]}" -ge 1488344400 ]] &&
           [[ "${BASH_REMATCH[2]}" -le 1497499200 ]]; then
            printf 'Found "%s"\n' "$d"
        fi
    fi
done

Isso itera todos os nomes db_*_*_* no diretório atual. Se algum nome corresponder à expressão regular db_([0-9]*)_([0-9]*) , uma comparação numérica será executada no último dos dois números encontrados no nome. Se a comparação for verdadeira, o nome será informado na saída padrão.

    
por 20.09.2017 / 19:53
1
ls /path/to/your/buckets | awk -F_ '$3 >= 1488344400 && $3 <= 1497499200'

Observação: no caso geral, um não deve analisar ls , mas como sabemos que nossos nomes de arquivos não contêm caracteres especiais, não devemos entrar em problemas neste caso particular .

Quanto ao awk : simplesmente definimos _ como o separador de campo e imprimimos todas as linhas em que o terceiro campo ("primeiro horário" de acordo com você) está entre as épocas mencionadas.

    
por 20.09.2017 / 17:54
0

Com bash :

for f in db_[0-9]*_[0-9]*; do 
    e_time="${f:14:10}"    # extracting 'earliest time'
    if [ $e_time -ge 1488344400 ] && [ $e_time -le 1497499200 ]; then 
        echo "$f"
    fi
done
    
por 20.09.2017 / 17:55

Tags