%20y%20obtener%20un%20rango%20de%20fechas%3F.png)
Tengo 2 archivos con fechas, que se ven así:
# cat file_1
20190105
20171124
# cat file_2
20190112
20171201
¿Cómo comparo fechas (línea por línea) y obtengo un rango de fechas?
Por ejemplo, algo como esto:
# cat final_file
20190105
...
20190112
20171124
...
20171201
Respuesta1
¿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
La salida será:
20190105
20190106
...
20190112
==========
20171124
20171125
20171126
20171127
...
20171200
20171201
==========
Respuesta2
A partir de los archivos de entrada y salida dados, se supone que los datos están estructurados de la siguiente manera:
cat -n FROM_DATE
1 20190105
2 20171124
cat -n TO_DATE
1 20190112
2 20171201
por lo que la fecha tiene el formato de YYYYmmdd
(y era, es decircreado a través dedate +%Y%m%d
).
Para tener una mejor idea de cómo se ve agregado, veamosimprimir los dos archivos uno al lado del otro.
pr -m -J -t FROM_DATE TO_DATE
20190105 20190112
20171124 20171201
Entonces parece que la pregunta es más sobre "¿Cómo expandir el rango de valores que se dividen en dos archivos y agregar el resultado?".
Siguiendo las sugerencias del comentario de @steeldriver y la respuesta de @Nortole, una posible solución podría ser la siguiente:
#!/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
Al ejecutar el script se obtendrá el resultado esperado:
20190105
20190106
20190107
20190108
20190109
20190110
20190111
20190112
20171124
20171125
20171126
20171127
20171128
20171129
20171130
20171201