
我有 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
(且是 ie透過創建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