用于从 .csv 文件的特定列中单独过滤日期并将输出保存在另一个 csv 文件中的 shell 脚本

用于从 .csv 文件的特定列中单独过滤日期并将输出保存在另一个 csv 文件中的 shell 脚本

7/20/2017 17:00例如,考虑一个 .csv 文件,其日期格式列在第六列中 。

如果我给出输入,7/11/2017那么它应该过滤具有匹配输入日期的列,并且输出应该保存在另一个 .csv 文件中

我需要一个命令来根据给定的输入过滤第六列。

file.csv 具有以下条目:

23,54,one,tree,56,7/20/2017 17:00,23,iii,89
23,54,one,tree,56,7/20/2017 17:00,23,iii,89
23,54,one,tree,56,7/21/2017 17:00,23,iii,89
23,54,one,tree,56,7/30/2017 17:00,23,iii,89

同样,第六列中的多个日期和时间格式的条目。在运行时给出的输入(例如 read )7/20/2017,然后它应该过滤第 6 列中的日期并将输出条目保存到另一个 .csv 文件。

答案1

简单地与awk

awk -F, -v d="7/20/2017" '$6~d' input.csv > dates.csv

内容dates.csv

23,54,one,tree,56,7/20/2017 17:00,23,iii,89
23,54,one,tree,56,7/20/2017 17:00,23,iii,89

如果日期值来自 shell 变量:

d="7/20/2017"
awk -F, -v d="$d" '$6~d' input.csv > dates.csv

答案2

假设只有一列具有该格式的日期:

$ grep -F '7/20/2017' file.csv
23,54,one,tree,56,7/20/2017 17:00,23,iii,89
23,54,one,tree,56,7/20/2017 17:00,23,iii,89

您可以将其重定向到一个新文件:

$ grep -F '7/20/2017' file.csv >new.csv

要正确解析 CSV 文件,请使用 CSV 解析器,例如内置的解析器CSVkit 工具

$ csvgrep -c 6 -m '7/20/2017' file.csv
23,54,one,tree,56,7/20/2017 17:00,23,iii,89
23,54,one,tree,56,7/20/2017 17:00,23,iii,89

相关内容