按日期范围过滤输出的最佳方法

按日期范围过滤输出的最佳方法

我需要按日期过滤 csv 文件的一行。

该文件的结构如下:

[email protected]                                           active      01/24/11 10:04   07/23/23 16:56
[email protected]                                              active      04/07/14 15:56   04/23/21 04:02
[email protected]                                               active      07/27/12 16:24   11/13/12 01:14
[email protected]                                             active      11/02/10 14:00   09/05/14 11:34
[email protected]                                              active      05/19/11 18:11   03/25/15 12:22
[email protected]                                              active      06/26/14 12:45   03/05/19 20:27

我能够使用以下方法按日期排序:

awk '{print $1 "," $3 "," $5}' | sort -t "," -n -k 2.7,5 -k 2.8,5 -k 2.1,5 -k 2.2,5 -k 2.4,5 -k 2.5,5

这给了我按日期排序的行。

例子:

[email protected],01/24/11,07/23/23
[email protected],04/07/14,04/23/21
[email protected],07/27/12,11/13/12

有没有办法按日期过滤此输出?比如说仅打印 12/11/22 之后的行,或者仅打印给定字段或列的 12/11/22 之前的行?

我尝试过的:

grep -e '[3-9].$' -e '2[3-9]$' -e '12/[1-3]./22$' myfile.csv

至于输出,此命令会过滤第三行 $3。因此,此示例的输出为:

[email protected],01/24/11,07/23/23

这有效,但只针对第三列中的一个日期,而且我不太明白它的作用,或者如何根据请求数据的日期范围来更改它。

谢谢!

答案1

你可以使用磨坊主,一个很好的 CSV 感知 cli。

你可以运行示例

mlr --nidx --repifs filter 'strptime($3,"%m/%d/%y")>strptime("11/13/12","%m/%d/%y")' input.csv

$3过滤掉第三个字段( )大于的所有记录11/13/12,得到

[email protected] active 04/07/14 15:56 04/23/21 04:02
[email protected] active 06/26/14 12:45 03/05/19 20:27

一些说明:

  • --nidx --repifs设置数据格式,索引编号(工具包样式),字段分隔符重复(空格)
  • filter,将过滤器应用于字段的动词
  • strptime,设置日期格式的函数。

答案2

由于您已经对列表进行了排序,请尝试以下命令

$ cat a.txt

[email protected],01/24/11,07/23/23 

[email protected],04/07/14,04/23/21

[email protected],07/27/12,11/13/12

过滤字符串匹配之前的所有行(包括匹配的行)

$ cat a.txt | sed '/04\/23\/21/q' # use escape sequence for date 04\/23\/21

[email protected],01/24/11,07/23/23

[email protected],04/07/14,04/23/21

过滤匹配字符串之后的所有行(包括匹配的行)

$ cat a.txt | sed -n '/04\/23\/21/,$p' # use escape sequence for date 04\/23\/21 

[email protected],04/07/14,04/23/21

[email protected],07/27/12,11/13/12

相关内容