私は約10MMレコードのファイルを持っています。unix awk月の日付フィールドから整数フィールドを減算する
0000000566 2017/01/01
0000000055 2017/01/01
0000000109 2016/12/01
0000000940 2017/01/01
0000000566 2016/12/01
0000000055 2016/12/01
0000000109 2016/11/01
私は」:私は基本的に日付の月のオフ最後の整数値を引くので、整数ことなく、新しい価値を印刷する必要が
0000000566 2017/01/01 0
0000000055 2017/01/01 0
0000000109 2017/01/01 1
0000000940 2017/01/01 0
0000000566 2017/01/01 1
0000000055 2017/01/01 1
0000000109 2017/01/01 2
:ここに私のdateSampleのsrcファイルです(またはテスト中にmacOS上でgdateして)実際の問題を抱えていて、最後の数日間は無駄に探していました。
それはゼロで接頭辞とMとDの値を落としています次のいずれか
awk '{ print (gdate -d $2 +"%Y/%m/%d") }' <$src
または接尾辞年から整数を引い:
awk '{ print (gdate -d $2 +-$3 months +"%Y/%m/%d") }' <$src
またはまだ一緒に全部をマッシュ正しくありません:
awk '{ print gdate -d (gdate -d $2 +"%Y/%m/%d") +-$3 months +"%Y/%m/%d" }' <$src
私は、次のような優れた応答が見つかりました: Increment date with AWK for few days and months 私は望んでいるものを正確にやっているが、コマンド内のコマンドのために非常に遅いと思っている。
awk '{ cmd=" gdate -d \"$(gdate -d \""$2"\")+\"-"$3"\"months\" \"+%Y/%m/%d\" ";
cmd | getline fmtDate; close(cmd);
print $1, fmtDate
}' <$src
だから私は基本的にパフォーマンスの方法で、その出力を必要とする:ここで
は、現在のawkは(私は今のMacOSのBSD上で実行していますので、私はgdateを使用しています)です。
事前にガイダンス/リライトをお寄せいただきありがとうございます。
乾杯
すごい反応...詳細な説明をいただきありがとうございます。 strftime-mktimeコンボはとても素敵で、超高速動作しています。 完全版のために「手作り」版もありがとう。 ありがとうございます。乾杯。 – sigmazen
歓迎します、あなたの問題を解決してうれしいです。 – randomir