csvの特定の列で日付範囲をフィルタリングするコマンドがありますが、いずれかのケースで失敗します。

csvの特定の列で日付範囲をフィルタリングするコマンドがありますが、いずれかのケースで失敗します。

csvの特定の列で日付範囲をフィルタリングするコマンドがありますが、開始日と終了日が同じで、入力ファイルにその日付の項目が1つしかない場合は機能しません。

awk -v start="$start" -v end="$end" -F, '$2>=start && $2<=end' Inputfile 

start="10/25/2017"2番目の列の日付をフィルタリングすることはうまく機能しますが、入力ファイルが次のend="10/25/2017"場合(たとえば、「2017/10/25」の日付の項目が1つしかない場合)、出力は得られません。

1,10/25/2017,Scheduled
3,11/1/2017,Scheduled
1,11/2/2017,Scheduled

答え1

あなたの出来事とデータファイルを正確に確認しました。しかし、それは私にとって効果的です

  • AWKはそのような日付について知らないため、2017年9月30日は2017年10月1日よりも高いです。したがって、結果は単なる文字列であるため、予想から離れている可能性があります!
  • 2017/09/30、2017/10/01などの「軍事型タイミング」が機能します.
  • 月/日/年を区別し、それに応じて比較します。しかし、この場合はawkの代わりにperlをお勧めします。

たぶんそれはあなたが経験している可変範囲の問題かもしれません。

たとえば、export start='10/25/2017' ; export end='10/25/2017'サブシェルで実行する代わりに awk を試してみてください。start="10/25/2017"

関連情報