从 csv 文件的特定列(最后第三列)过滤日期。另外,如果最后第三列为空,则打印行

从 csv 文件的特定列(最后第三列)过滤日期。另外,如果最后第三列为空,则打印行

输入 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 文件中倒数第三列的相同日期进行过滤(不应从第一个或开始检测列,因为逗号会有所不同,因此应从倒数第三列开始)

答案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
# .........................^^^

如果倒数第三列为空或者是“今天”

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

答案2

使用单一 GNUawk过程:

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(您可以指定您喜欢的文件名)

相关内容