2

bash に 2 つのスクリプトがあり、いくつかのファイルがあります。

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

そして、1 か月でファイルを cat しますが、今は、1 年の特定の週でスクリプトを呼び出す必要があります。

bash script2.sh 2012-01

ここで、2012 は年、01 は月です。

今、私はスクリプトを呼び出す必要があります:

bash script2.sh 2012 13

ここで、2012 は年、13 は年の週です。

今、ユーザーが指定した年と週のファイルにのみ猫が必要です。月ごと、週ごとではありません

しかし、ファイルのフォーマットは私を助けません!!!! 名前が transaction-year-week.csv.bz2 ではなく、transaction-year-month-day.csv.bz2 であるためです。

4

1 に答える 1

0

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の日付の文字列表現です$input_format。そして、$output_formatあなたがあなたの日付を望むフォーマットです.

最初の 2 つのフィールドは簡単です。日付の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目的の日付として入力した場合、すべてのファイルを調べて、目的の範囲の日付を持つファイルを見つけます。: 年の週はゼロで埋められます。一致させるには、週番号の入力をゼロで埋める必要がある場合があります。

于 2013-05-30T19:04:48.083 に答える