時間列に基づくCSVファイルのフィルタリング

時間列に基づくCSVファイルのフィルタリング

次の構造のcsvファイルがあります。 5つの列があります。

2/3/2018    17:00:00    39.50755167 139.94117   72
.....
2/1/2018    1:00:00     37.67323333 140.0666667 48
......

csvファイルをフィルタリングし、2018年2月3日17:00:00より前に発生したすべてのデータ行を選択し、フィルタリングされたデータを新しいcsvファイルに保存したいと思います。

ベストアンサー1

あなたの日付はMM / DD / YYYY(DD / MM / YYYYではない)と仮定します。最初の行に基づいていない外部(ハードコーディング)カットオフ値を指定したいとします。

gawk(GNU awk)でこれを行うことができます。

awk '
  BEGIN { cutoff = mktime("2018 2 3 17 0 0");
          if (cutoff < 0) { print "Bad cutoff date."; exit; } }
        {
            if (split($1, da, "/") == 3  &&  split($2, ti, ":") == 3) {
                thisdate = mktime(da[3] " " da[1] " " da[2] " " ti[1] " " ti[2] " " ti[3])
                if (thisdate >= 0  &&  thisdate < cutoff) print
            }
        }
    '

gawkのmktime関数は、「YYYY MM DD hh mm ss」形式の時間文字列をシステム時間に変換します。まず(BEGIN)2018年2月3日17:00:00をシステム時間に変換します。次に、各行に有効な日付と時刻が含まれていることを確認し、変換してカットオフ値と比較します。

もちろん、ファイルが実際にカンマで区切られている場合は-F,

おすすめ記事