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 days
5 days
-f
date
bash
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 -
。