入力csvファイルは次のとおりです。
23,54,one,tree,56,23,7/20/2017 17:00,iii,89
23,54,one,tree,56,23,7/20/2017 17:00,iii,89
23,54,one,tree,56,23,7/21/2017 17:00,iii,89
23,54,one,tree,56,23,7/30/2017 17:00,iii,89
現在の日付を取得するにはシェルコマンドが必要ですフォーマットして7/20/2017
から、csvファイルの3番目の列から最後の列まで同じ日付を使用してフィルタリングします(列は最初の列から検出しないでください。そうしないと、カンマによって違いが発生するため、3番目の列から最後の列列まで始める必要があります)。
答え1
awk -F, -v "today=$(date "+%m/%d/%Y" | sed 's/^0//')" '$(NF-2) ~ "^"today' file
sedの使用が不便な場合は、日付のマニュアルページをよくお読みください。
awk -F, -v "today=$(date "+%-m/%d/%Y")" '$(NF-2) ~ "^"today' file
# .........................^^^
最後の列の 3 番目の列が空の場合、または「今日」の場合
awk -F, -v "today=$(date "+%-m/%d/%Y")" '$(NF-2) == "" || $(NF-2) ~ "^"today' file
答え2
単一のGNUを使用するアップロセス:
awk -F',' 'BEGIN{ d=strftime("%-m/%d/%Y", systime()) }
$(NF-2)~/^[[:space:]]*$/{ print > "empty_dates.txt" }$(NF-2)~d' file
$(NF-2)~/^[[:space:]]*$/{ print > "empty_dates.txt" }
- 3番目のフィールド(最後)が空の場合 - その行をファイルとして印刷しますempty_dates.txt
(必要なファイル名を指定できます)。