入力ファイル
ID,Name,join_date
21433432,rds,2014_02_01
2131321,ABCDS,2014-10-20
2432745314,ASRER, 2015-01-20
2132432423,safdsad, 2015-12-30
2つのファイルを生成する必要があります。 1つは、日付列が1ヶ月未満、6ヶ月未満のレコード用です。
出力ファイル1は1ヶ月未満です。
ID,name,join_date
2432745314,ASRER, 2015-01-20
2132432423,safdsad, 2015-12-30
出力ファイル2が6ヶ月未満です。
2131321,ABCDS,2014-10-20
コマンドを使用しましたがawk
機能しませんでした。
答え1
これは始めるのに役立ちます。時間関数を実装するにはGNU awkが必要です。
gawk -F, '
function totime(ymd) {gsub(/[-_]/," ",ymd); return mktime(ymd " 0 0 0")}
BEGIN {now = systime(); m1 = now - 86400 * 30; m6 = now - 86400 * 180}
FNR == 1 {next}
{t = totime($3)}
t > m1 {print "m1", $0; next}
t > m6 {print "m6", $0}
' file
m6 2131321,ABCDS,2014-10-20
m1 2432745314,ASRER, 2015-01-20
m1 2132432423,safdsad, 2015-12-30
正確に1ヶ月6ヶ月ではなく、30日180日、夏時間の切り替えによる1時間プラスマイナス1時間
答え2
date
内部コマンドを使用し、awk
いくつかの条件に応じて出力を目的のファイルにリダイレクトするだけです。print
awk -F, 'BEGIN{ "date -d\"month ago\" +%s" | getline T1; close("date");
"date -d\"6 months ago\" +%s" | getline T6; close("date")}
{ "date -d" $3 " +%s" | getline t; close("date");
if(t>T1){print $0>"file2";next} if(t>T6)print $0>"file3"}' file
重要なのは、コマンドを使用して日付形式を1970年以降の秒に変換することですdate -d ... "+%s"
。残りは自明でなければなりません。