Como buscar o arquivo com o maior número de versão

2
abc_efg_2015_hanshake_01.csv.gz
abc_efg_2015_hanshake_02.csv.gz
abc_efg_2015_hanshake_03.csv.gz

como buscar o arquivo com o maior número de versão e armazená-lo em uma matriz.

    
por sunil kumar j n 19.12.2015 / 15:31

1 resposta

1

Coloque todos os nomes de arquivos em uma matriz. Você não especificou como está definindo o conjunto de nomes de arquivos nos quais está interessado. Suponho que eles tenham um prefixo e um sufixo comuns. Faça uma matriz com todos os nomes de arquivos.

all=(abc_efg_2015_hanshake_*.csv.gz)

Se todos os números de versão tiverem o mesmo tamanho, o que parece ser o caso em seu exemplo, pois os números têm zeros à esquerda, o arquivo com o maior número de versão é o último elemento da matriz. O número de elementos na matriz é ${#all[@]} e as matrizes são numeradas de 0, portanto, o último elemento é o número $((${#all[@]}-1)) .

highest=${all[$((${#all[@]}-1))]}

Se os números de versão não tiverem o mesmo comprimento, geralmente é mais conveniente usar sort para classificá-los. Eu suponho que não há novas linhas nos nomes dos arquivos. Aqui eu isolo o nome do arquivo como a parte antes do primeiro . , mas somente após o último _ antes do primeiro . .

highest_version=$(printf '%s\n' abc_efg_2015_hanshake_*.csv.gz |
                  sed -e 's/\..*//' -e 's/.*_//' |
                  sort -n | tail -n1)
highest=abc_efg_2015_hanshake_${highest_version}.csv.gz
    
por 20.12.2015 / 00:24