使用grep或awk从文本文件中提取格式化日期

时间:2014-07-01 21:22:17

标签: awk grep

我有一个包含许多日期的文件,写作" 2014年1月1日和#34;。如何使用awk或grep按时间顺序(在文件中对它们进行排序)从文件中确定所有这些日期?

我基本上想要: grep" $ a%d,%d" file.txt的 但是,我想让$ a = {1月,...,12月}。

基本上,最后,我想要一个文件:

June 1, 2010
June 5, 2010
...

2 个答案:

答案 0 :(得分:1)

由于只有12个月的名称,因此将它们硬编码到表达式中并不是不合理的。请记住,我使用的是...,但您应该使用实际的月份名称。

 egrep -o  '(January|February|March|...|December) [0-9]+, [0-9]+' Input.txt

答案 1 :(得分:1)

TL:DR

$ sort -M /tmp/dates | awk -v month=June '$0 ~ month {print $1, $2, $3}'

使用GNU Sort和GNU Awk

GNU sort提供--month-sort标志。鉴于以下输入:

December 31, 2014
June 5, 2010
December 31, 2013
June 1, 2010
January 1, 2009

sort命令会将行排序为合理的按日期排序的顺序。如果你必须进行二次排序,你也可以这样做。

同时,您可以使用awk命令将每一行与所需月份(存储在变量中)进行匹配,然后仅打印每个匹配记录中的日期字段。

在我的系统上,根据上面的输入,我在month=June

时得到以下输出
June 1, 2010
June 5, 2010