web-dev-qa-db-ja.com

awkの現在の日付

awkには、今日の日付を格納する定数変数がありますか?いいえの場合、毎日の使用のために今日の日付を保存できる方法はありますか?

以下のファイルがあるとしましょう:

boo,foo,2016-08-30
foo,boo,2016-07-31

そして、日付を比較する必要があります$3は、ファイルの中で、今日が何であるかに関係なく、今日の日付です。

つまり、以下のスクリプト:

awk -F, '{if($3>"2015-08-23"){print $0}}'

どこ 2015-08-23は現在の日付によって変更されます。

4
Eng7

標準のawkには、日付を取得するための組み込み関数はありませんが、日付を変数に簡単に割り当てることができます。

awk -F, -v date="$(date +%Y-%m-%d)" '$3>date'

またはawkスクリプトで

BEGIN {
    str = "date +%Y-%m-%d";
    str | getline date;
    close str;
}
$3>date

gawk、組み込み time functions 、およびstrftimeを使用できます。

gawk -F, 'BEGIN{date=strftime("%Y-%m-%d")}$3>date'
19
kdhp

現在のtime_tを取得したい場合は、srand()を呼び出してからt = srand()を呼び出すことで実行できます。

$ awk 'BEGIN{srand(); print srand()}'
1440536144

これはposixが引数なしで呼び出された場合、現在の時間で初期化され、前のシードを返す必要があるため、機能します。

4
schily

getline回避策の使用:

awk -F, ' BEGIN { "date +%Y-%m-%d" | getline a } { if ( $3>a ) { print 0 }} ' file
3
Fiximan

変数を割り当てることでそれを行うことができます:

cat /path/to/file | awk -v date="$(date +'%Y-%m-%d')" -F, '{if($3>date){print $0}}'
2
hellcode