날짜를 한 줄씩 비교하고 날짜 범위를 얻는 방법은 무엇입니까?

날짜를 한 줄씩 비교하고 날짜 범위를 얻는 방법은 무엇입니까?

날짜가 포함된 파일이 2개 있는데 다음과 같습니다.

# cat file_1
20190105
20171124
# cat file_2
20190112
20171201

날짜를 한 줄씩 비교하고 날짜 범위를 얻으려면 어떻게 해야 합니까?

예를 들어 다음과 같습니다.

# cat final_file
20190105
...
20190112
20171124
...
20171201

답변1

같은 것?

#!/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

출력은 다음과 같습니다:

20190105
20190106
...
20190112
==========
20171124
20171125
20171126
20171127
...
20171200
20171201
==========

답변2

주어진 입력 및 출력 파일에서 데이터는 다음과 같이 구성되어 있다고 가정됩니다.

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

날짜는 다음과 같은 형식을 갖습니다 YYYYmmdd. 즉다음을 통해 생성됨date +%Y%m%d).

집계된 모양에 대한 더 나은 아이디어를 얻으려면 다음을 수행하십시오.두 파일을 나란히 인쇄.

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

따라서 질문은 "두 개의 파일로 분할된 값의 범위를 확장하고 결과를 집계하는 방법"에 관한 것 같습니다.

@steeldriver의 의견과 @Nortole의 답변의 힌트에 따라 가능한 해결책은 다음과 같습니다.

#!/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

스크립트를 실행하면 예상되는 출력이 제공됩니다.

20190105
20190106
20190107
20190108
20190109
20190110
20190111
20190112
20171124
20171125
20171126
20171127
20171128
20171129
20171130
20171201

관련 정보