将一个月中的bash脚本调用更改为一周

我在bash中有两个脚本,我有一些文件:

transaction-2012-01-01.csv.bz2 transaction-2012-01-02.csv.bz2 transaction-2012-01-03.csv.bz2 transaction-2012-01-04.csv.bz2 . . transaction-2012-01-31.csv.bz2 transaction-2012-02-01.csv.bz2 . . transaction-2012-02-28.csv.bz2 

我有一个脚本叫script.sh

 cat script.sh YEAR_MONTH=$1 FILEPATH="transaction-$YEAR_MONTH*.csv.bz2" bzcat $FILEPATH|strings|grep -v "code" >> output 

如果你需要调用脚本,你可以使用其他脚本

 cat script2.sh LAST_MONTH=$(date -d -1month +%Y"-"%m) if [ $# -eq 1 ]; then DATE=$1 else DATE=$LAST_MONTH fi script.sh $DATE 1>output$DATE.csv 2>> log.txt 

它在一个月内捕获这些文件,但是现在我需要在一年中的特定一周内调用脚本:

 bash script2.sh 2012-01 

其中2012是一年,01是一个月

现在我需要调用脚本:

 bash script2.sh 2012 13 

其中2012年是一年,13年是一年中的一周

现在我只需要用户指定的年份和周的文件,而不是每个月每个星期

但文件的格式不帮助我! 因为名称是交易年 – 月 – 日.csv.bz2,而不是交易 – 年 – 周.csv.bz2

Solutions Collecting From Web of "将一个月中的bash脚本调用更改为一周"

看看strftime的手册页。 这些是日期格式代码。 例如:

 $ date +"%A, %B %e, %Y at %I:%m:%S %p" 

将打印出如下日期:

 Thursday, May 30, 2013 at 02:05:31 PM 

试着看看为什么这个工作。

某些系统上, date命令将有一个-j开关。 这意味着,不要设置日期,而是重新给定日期的格式。 这使您可以将一个日期转换为另一个日期:

 $ date -f"$input_format" "$string_date" +"$output_format" 

$input_format是输入日期的格式。 $string_date$string_date中日期的字符串表示$input_format 。 而且, $output_format是你想要的日期格式。

前两个字段很容易。 你的日期是YY-MM-DD格式:

 $ date -f"%Y-%m-%d" "$my_date_string" 

问题是你能为最终的格式做什么。 幸运的是,这一年有一个星期的格式。 %V代表01-53的星期, %W代表星期00-53

你需要做的是找到你的文件名称的日期字符串,然后将其转换为年和周的数字。 如果这与输入相同,则需要连接此文件。

 find $dir -type f | while read transaction_file do file_date=${transaction_file#transaction-} #Removes the prefix file_date=${file_date%.csv.bz2} #Removes the suffix weekdate=$(date -j -f"%Y-%m-%d" "$file_date" +"%Y %W") [ "$weekdate" -eq "$desired_date" ] || continue ... done 

例如,有人将2013 05作为期望的日期,您将浏览所有的文件,并找到日期在您想要的范围内的文件。 :一年的一周是零填充。 您可能需要填写周数的输入以匹配。