【发布时间】:2018-07-08 10:53:58
【问题描述】:
我尝试删除前几天不匹配的 csv 文件的所有日期。但我发现不是正确的解决方案。
date,price
2018-07-02,162.17
2018-06-29,161.94
2018-06-28,162.22
2018-06-27,162.32
2018-06-12,163.01
2018-06-11,163.53
2018-05-31,164.87
2018-05-30,165.59
2018-05-29,165.42
2018-05-25,165.96
2018-05-02,164.94
2018-04-30,166.16
2018-04-27,166.69
我想要的输出变成
date,price
2018-06-29,161.94
2018-05-31,164.87
2018-04-30,166.16
我用 cut + grep 试试
cut -d, -f1 file.csv | grep -E "28|29|30"
组合 -f1,2 时工作但什么都不带。
我发现 csvkit 在我看来是正确的工具,但我发现不是多个 grep 的解决方案。
csvgrep -c 1 -m 30 file.csv
带给我正确的结果,但如何组合多个搜索选项?我尝试 -m 28,29,30 和 -m 28 -m 29 -m 30 都不起作用。最好在每个月的最后一天使用。
也许有人在这里有一个想法。
谢谢你,美好的星期天 西尔维奥
【问题讨论】:
-
请在您的帖子中也发布预期的输出,然后让我们知道。
-
顺便说一句,只看csvkit的文档,我觉得你使用了错误的语法。
csvgrep -c 1 -r '(28|29|30)$'或类似的东西呢?正则表达式必须适当调整。 -
2018-06-29?这通常不是六月的最后一天,闰年呢? -
是的,这是另一个问题。但是看他的代码,他似乎在提取 28、29 和 30 行。
-
这是来自invest.com 的历史报价。因此,并非所有月份,并非他们提供的所有数据都以我们的月份正确结束。这就是为什么我只需要一个月的最后一个条目。如果月底 29、28、30 或任何时候。仅当月 csv 文件中的最后一个条目。