Bash

如何提取日期併計算它是否在今天的“x”天內?

  • December 14, 2015

目前我的文件結構為

Foo Sign: blah
   SubFoo Sign: blah
   BarDate: 2017-11-31
Foo Sign: blah
   BarDate: Never
Foo Sign: blah
   BarDate: 2016-12-20
Foo Sign: blah
   BarDate: 2014-12-20
.... and so on

這是駐留在文件中的主要四類數據。不要與foo, bar,blah事情一起去,那些並不重要。主要重要的是BarDate和它的價值。

主要部分

**案例1:**如果BarDate價值是Never我什麼都不用做。

**情況 2:**如果BarDate有一些值,而不是Never它的格式為YYYY-MM-DD.

**要求:**如果在BarDate從今天起的 10 天內,它將郵寄給某人,並附上它的詳細資訊。

所以,今天15-12-2015如果有任何BarDate在 2015 年 12 月 15 日至 25 日之間的郵件,將發送帶有它的Foo Sign, BarDate.

因此,將為2015-12-16, 2015-12-24, 2015-12-25…觸發一封郵件

但不是為了2014-12-16, 2016-12-24,2015-12-26

到目前為止,我的 shell 腳本是

foo=""
bardate=""
outputfile="test.txt"
result=""
newline="\n"

### just a workaround step ###
if [ -f $outputfile ];
then
 `rm $outputfile`
fi

### filtering the date which doesn't have BarDate as Never, and writing it to a file ###
`cat datafile | grep -e "Foo Sign" -e BarDate | grep -v "Never" | uniq >> $outputfile`

IFS=$'\n'


### contains is a custom function which returns 1 if param1 is substring of param2 ###
for line in ${cat outputfile};
 do
   contains "$line" "Foo Sign" && foo="$line"
   ### constructing the result string ###
   ### -----> here I have to extract the date and see if it resides within 10 days span from today <----- ###
   ### then only the result string will be constructed ###
   contains "$line" "BarDate" && bardate="$line" && result=$result$newline$foo$newline$bardate$newline
 done

### mail the result ###
echo -e "$result" | mailx -s "BLAH" someone@example.com

你可以得到目前的紀元時間

date  "+%s"

您還可以將任何時間格式轉換為紀元時間:

date -d "${MY_TIME}" "+%s"

你可以減去這些時代。

在變數 LINE 中包含帶有的行BarDate: 2017-11-31,您可以使用以下方法提取日期:

MY_TIME=$(echo $LINE | cut -d: -f2)

引用自:https://unix.stackexchange.com/questions/249358