Como comparar datas (linha por linha) e obter um intervalo de datas?

0

Eu tenho 2 arquivos com datas, que são assim:

# cat file_1
20190105
20171124
# cat file_2
20190112
20171201

Como faço para comparar datas (linha por linha) e obter um intervalo de datas?

Por exemplo, algo assim:

# cat final_file
20190105
...
20190112
20171124
...
20171201
    
por Oleg Kalinin 20.11.2017 / 18:46

2 respostas

1

Algo como?

#!/bin/bash
while read -r line_a && read -r line_b <&3; do
    seq ${line_a} ${line_b}
    echo "=========="
done < file_1 3<file_2

A saída será:

20190105
20190106
...
20190112
==========
20171124
20171125
20171126
20171127
...
20171200
20171201
==========
    
por 22.11.2017 / 13:16
0

A partir dos arquivos de entrada e saída fornecidos, pressupõe-se que os dados sejam estruturados da seguinte forma:

cat -n FROM_DATE
     1  20190105
     2  20171124
cat -n TO_DATE
     1  20190112
     2  20171201

em que a data tem o formato de YYYYmmdd (e foi ou seja, criado via date +%Y%m%d ).

Para ter uma ideia melhor de como ele é agregado, permite que imprima o lado de dois arquivos lado a lado .

pr -m -J -t FROM_DATE TO_DATE
20190105        20190112
20171124        20171201

Portanto, parece que as perguntas são mais sobre "Como expandir o intervalo de valores que são divididos em dois arquivos e ter o resultado agregado?".

Seguindo as dicas do comentário do @steeldriver e da resposta do @Nortole, uma possível solução poderia se parecer com:

#!/bin/bash
while read -r START_DATE && read -r END_DATE <&3; do

echo $START_DATE

    for (( DATE="${START_DATE}"; DATE != END_DATE; )); do
        DATE="$(date --date="${DATE} + 1 days" +'%Y%m%d')"
        echo $DATE # which will be equals to END_DATE at the end
    done

done < FROM_DATE 3<TO_DATE

A execução do script fornecerá a saída esperada:

20190105
20190106
20190107
20190108
20190109
20190110
20190111
20190112
20171124
20171125
20171126
20171127
20171128
20171129
20171130
20171201
    
por 16.05.2018 / 10:51