日付に関連する行を引く

日付に関連する行を引く

sort最初のフィールド(たとえば、月/日(例:02-20))で編集されたテキストファイルがあります。

grep私はテキストファイルに使用してきましたが、date今日の日付を処理するには、スクリプトでコマンドを使用するのが最も簡単です。

過去3日、今日の日付、次の5日のデータを抽出したいのですが…末日/翌月を処理する簡単な方法がわかりません。私はこれをハードコードできますか?しかし、私は常に問題を解決するエレガントな方法を探しているので、提案を探しています。

私はスクリプトの移植性を最大限に高めるために通常のコマンドを使用することを好みます。

つまり、移植可能であることは、Linux/GNU システムに限定されているわけではありません (および/またはすべてを実行するには、特定のユーティリティをインストールする必要があります)。現在私はBSDシステムを使用しており、ほとんどのUNIXバージョン(Solaris、たぶん、あえて)を使って作業してきました。

私は他の種類のUNIXを使用するたびにパッケージをインストールすることを覚えておくのではなく、より複雑なプログラム/スクリプトを使用し、非常に基本的なツールを使用します(スクリプトディレクトリでscpを使用して動作するときに許可するとき)。


注:現在のdate-dフラグは夏時間を設定します。 :)

 -d dst  Set the system's value for Daylight Saving Time.

さて、ファイルのデータ型の例(要求どおり)を提供しましたが(obvsははるかに大きい)、極端なケースは提供しませんでした。これは極端なケースです。つまり、月末テストで各月(または4つの種類の月:30、31、28、29)をプログラムせずに月末期間を処理する方法です。

01-01   Something To Do Here    Notes that may run for a really long time
02-05   On the 5th of the Month         Do this other thing, because of X
02-06   The day after           Do this cleanup stuff
03-15   The Ides                Remember, remember the Brutus of December
03-29   Edge                    Does this show up on the 1st of April?
03-30   Edge2                   Does this show up on the 1st and 2nd?
03-31   Last day in the month   Shows?
04-01   Edge                    Does this show on 31st?  Or does it only show 03-35?

ベストアンサー1

GNU日付を使用すると、-d同じオプションの文字列を指定できます。このオプションを使用すると、ファイルまたはパイプからこれらの文字列を読み取ることができます。したがって、GNUを使用して次のようにします。-2 days5 days-fdatebash

printf '%d days\n' {-2..5} | date -f - +%m-%d | grep -f - in_file

修正する

これが許可されている場合、tcl日付を印刷するスクリプトは次のようになります。

#!/usr/bin/tclsh

set now [clock seconds]

for {set n -2} {$n<=5} {incr n} {
  set out_date [clock add $now $n days]
  puts [clock format $out_date -format %m-%d]
}

出力をパイプで接続するだけですgrep -f -

おすすめ記事