如何计算以日期开头的文本文件中的行数

时间:2017-02-08 16:23:20

标签: regex bash clearcase wc

我有一个内容为

的文件
2004-10-07     cva        create file ...
2003-11-11     cva        create version ...
2003-11-11     cva        create version ...
2003-11-11     cva        create branch ...

现在我想计算在这个特定文件中以date开头的行数。 我怎么能这样做

如果我使用wc -l <file.txt>
它给了我总行数(在我的情况下为5,而我想要的是数应为4)

2 个答案:

答案 0 :(得分:0)

一种简单易用的方法: Perl

您的文件

2004-10-07     cva 
2004-10-04             
anything
2004-10-07     cva 
anything
2004-10-07     cva 
2004-10-07     cva 

您需要
perl -lne ' ++$n if /^\d+-\d+-\d+/; print $n' your-file

输出

1  
2  
2  
3  
3  
4  
5  

统计并且仅打印金额
perl -lne ' ++$n if /^\d+-\d+-\d+/ ;END{ print $n}' your-file

<强>输出
5

使用egrep -c计算匹配数字
cat your-file | egrep -c '^[0-9]+-[0-9]+-[0-9]+'

<强>输出
5

答案 1 :(得分:0)

假设:

$ cat file
2004-10-07     cva        create file ...
no date
2003-11-11     cva        create version ...
no date
2003-11-11     cva        create version ...
no date
2003-11-11     cva        create branch ...

首先弄清楚如何在文件的每一行上运行正则表达式。假设您使用sed,因为它非常标准且快速。您还可以使用awkgrepbashperl

以下是sed解决方案:

$ sed -nE '/^[12][0-9]{3}-[0-9]{2}-[0-9]{2}/p' file
2004-10-07     cva        create file ...
2003-11-11     cva        create version ...
2003-11-11     cva        create version ...
2003-11-11     cva        create branch ...

然后将其传递给wc

$ sed -nE '/^[12][0-9]{3}-[0-9]{2}-[0-9]{2}/p' file | wc -l
      4

或者,您可以在awk中使用相同的模式,而无需使用wc

$ awk '/^[12][0-9]{3}-[0-9]{2}-[0-9]{2}/{lc++} END{ print lc }' file
4

或者,相同的模式,grep

$ grep -cE '^[12][0-9]{3}-[0-9]{2}-[0-9]{2}' file
4

(注意:目前还不清楚您的日期格式是YYYY-MM-DD还是YYYY-DD-MM如果已知,您可以使模式更具体。)