csvファイルの特定の列(最後の3番目の列)から日付をフィルタリングします。また、最後の3番目の列が空の場合は、次の行を印刷します。

csvファイルの特定の列(最後の3番目の列)から日付をフィルタリングします。また、最後の3番目の列が空の場合は、次の行を印刷します。

入力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(必要なファイル名を指定できます)。

関連情報