计算行数,匹配一个模式,但只匹配第一个

2024-09-29 23:31:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件有多行和各种内容。某些行以特定的模式开始,这可能会再次出现。E、 g

some line
some line
this: idA001 text
this: idA002 text
some line
this: idB001 text
this: idA001 text
this: idA002 text
this: idC001 text
...

我想计算第一次出现的this: id*。。在

如果我使用cat file | grep "this: " | wc -l我计算每一次发生的次数。。我是否需要编写一个脚本,先对行进行筛选,然后消除重复项,还是在一行bash命令中可以这样做? 如果需要脚本,我更喜欢Python或Bash。。在


Tags: 文件text脚本id内容line模式some
3条回答

我们可以这样做

len({i for i in file if i.startswith('this :id')})

如果您想在bash one liner中执行此操作:

sort < file | uniq | grep "this: " | wc -l

^{}命令删除重复的行。在

但是我们想过滤掉不一定相邻的重复行,所以我们首先^{}。在

其余的命令与原始命令相同。在

对于较新的*nix系统(我认为它包括您可能关心的任何系统),您可以将sort和{}调用组合成一个sort -u。另外,正如jm666所指出的,^{}输出匹配行的计数而不是匹配的行,因此您不需要wc。所以事情就变成了:

^{pr2}$

最后一件事:如果您只想要以this:开头的行,而不是在任何地方包含它的行,那么可以在grep表达式中使用^特殊字符,它只匹配行的开头,如下所示:

sort -u < file | grep -c "^this: "

这应该做到:

awk '/^this:/ && !seen[$0]++ {a++} END {print a}' file
4

它将计算以this:开头的唯一行数

相关问题 更多 >

    热门问题