Linux

從 csv 文件的特定列(從最後 3 列)過濾日期。此外,如果最後 3 列為空,則列印行

  • October 24, 2017

輸入 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

需要 shell 命令以格式獲取目前日期7/20/2017,然後使用 csv 文件中最後第三列的相同日期進行過濾(不應從第一個或開始檢測列,因為逗號不同,因此應該從最後 3 個開始)

awk -F, -v "today=$(date "+%m/%d/%Y" | sed 's/^0//')" '$(NF-2) ~ "^"today' file

對使用 sed 不滿意,請更仔細地閱讀 date 手冊頁:

awk -F, -v "today=$(date "+%-m/%d/%Y")" '$(NF-2) ~ "^"today' file
# .........................^^^

如果倒數第三列是空的或者是“今天”

awk -F, -v "today=$(date "+%-m/%d/%Y")" '$(NF-2) == "" || $(NF-2) ~ "^"today' file

使用單個 GNU awk程序:

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" }- 如果第三個欄位(最後)為空 - 將該行列印到文件中empty_dates.txt(您可以指定您喜歡的文件名)

引用自:https://unix.stackexchange.com/questions/400200