csvfile中每月的最后一天

时间:2018-07-08 10:53:59

标签: bash shell csv csvkit

我尝试删除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都无法正常工作。最好在每个月的最后一天使用。

也许有人在这里有个主意。

谢谢你,周日愉快 西尔维奥

1 个答案:

答案 0 :(得分:2)

您想获取该月最后一天的所有记录。但是长度不同(28-29-30-31)。

我不明白您为什么使用cut来提取第一个字段(日期部分),因为第二个字段中的数据根本看起来不像日期(xx-xx)。

我建议直接使用grep来显示与以下模式mm-dd匹配的行;其中mm是月份号,dd是月份的最后一天。

此命令可以解决问题:

grep -E "01-31|02-(28|29)|03-31|04-30|05-31|06-30|07-31|08-30|09-31|10-30|11-31|12-30" file.csv

此命令将提供以下输出:

2018-05-31,164.87
2018-04-30,166.16