我有一个内容为
的文件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)
答案 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
,因为它非常标准且快速。您还可以使用awk
,grep
,bash
,perl
以下是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
如果已知,您可以使模式更具体。)