日付を(行ごとに)比較し、日付の範囲を取得するにはどうすればよいでしょうか?

日付を(行ごとに)比較し、日付の範囲を取得するにはどうすればよいでしょうか?

日付が記載されたファイルが 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)。

集計結果がどうなっているかもっとよく理解するために、2つのファイルを並べて印刷する

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

したがって、質問は「2 つのファイルに分割された値の範囲を拡張し、結果を集計する方法」に関するものであると思われます。

@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

関連情報