Classifique um arquivo baseado na parte intermediária

4

Tenho abaixo os arquivos no unix, quero classificar os arquivos com base na data & tempo nos nomes dos arquivos

ABC_XYZ.20170201.223147.txt
ABC_XYZ.20170201.223146.txt
ABC_XYZ.20170127.223141.txt
ABC_XYZ.20170125.223139.txt
ABC_XYZ.20170214.223134.txt

Estou esperando abaixo como saída

ABC_XYZ.20170125.223139.txt
ABC_XYZ.20170127.223141.txt
ABC_XYZ.20170201.223146.txt
ABC_XYZ.20170201.223147.txt
ABC_XYZ.20170214.223134.txt

Eu tentei usar sort -k e sort -n , talvez não os use da maneira certa.

    
por James 09.03.2017 / 21:44

1 resposta

2

Se todos os arquivos na pasta atual tiverem o mesmo formato descrito, você poderá usar o seguinte:

ls | sort -t . -k 2 

A opção -t define o delimitador como .
A opção -k indica qual chave usar para a classificação.

Com o formato de nome de arquivo fornecido, você não precisa da opção -n , pois o número de dígitos é o mesmo em cada nome de arquivo. Se esse não for sempre o caso, você também poderá adicionar facilmente a opção -n :

ls | sort -n -t . -k 2 

Novamente, se houver vários tamanhos de dígitos para cada seção dos nomes de arquivos, você poderá especificar as duas chaves e até que ponto as estender:

ls | sort -n -t . -k 2,2 -k 3,3
    
por 10.03.2017 / 02:45