
次の構造の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,
。