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

使用grep或awk从文本文件中提取格式化日期,awk,grep,Awk,Grep,我有一个有很多日期的文件,写着“2014年1月1日”。如何使用awk或grep按时间顺序(它们在文件中排序)从文件中精确计算所有这些日期 我基本上想要: grep“$a%d,%d”file.txt 但是,我想让$a={1月,…,12月} 基本上,最后,我想要一个具有以下内容的文件: June 1, 2010 June 5, 2010 ... 因为只有12个月的名称,所以将它们硬编码到表达式中并不是不合理的。请记住,我在下面使用了…,但是您应该在实际月份名称中写入。 egrep -o '(J

我有一个有很多日期的文件,写着“2014年1月1日”。如何使用awk或grep按时间顺序(它们在文件中排序)从文件中精确计算所有这些日期

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

基本上,最后,我想要一个具有以下内容的文件:

June 1, 2010
June 5, 2010
...

因为只有12个月的名称,所以将它们硬编码到表达式中并不是不合理的。请记住,我在下面使用了
,但是您应该在实际月份名称中写入。

 egrep -o  '(January|February|March|...|December) [0-9]+, [0-9]+' Input.txt
TL:DR 使用GNU排序和GNU Awk GNU排序提供了
--月份排序
标志。考虑到以下输入:

December 31, 2014
June 5, 2010
December 31, 2013
June 1, 2010
January 1, 2009
sort命令将行排序为合理的日期排序顺序。如果必须进行二次排序,也可以随时进行

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

在我的系统上,给定上述输入,当
month=June
时,我得到以下输出:

June 1, 2010
June 5, 2010

每行都只有日期吗?请提供示例输入和所需输出。每次出现“xx月,xxx”形式的内容时,我都想提取它。它通常表现为nowrap;“>2013年1月15日hanks!-o做了什么?@Cokes,它使得只输出匹配的部分而不是整行。因此,[0-9]后面的+表示任意长度的整数,[0-9]表示0到9之间的任意整数。OP提到他的文件已经有了排序的日期。您正在解决另一个问题。
June 1, 2010
June 5, 2010