您好我有相关的问题 link
我有一个大文本文件,其中一些行包含单词"DataMeetingIs11"
,其中以下行包含单词"done"
或注释。我的任务是计算所有这些线。例如,我想在没有"完成"单词
grep -A 1 DataMeetingIs11 your_file|fgrep -v -c
没有工作
答案 0 :(得分:1)
您需要添加-P
Perl-regexp参数才能实现上述目标。
grep -oPz '.*DataMeetingIs11.*(?=\n.*done)' file | wc -l
如有必要,添加字边界。
grep -oPz '.*\bDataMeetingIs11\b.*(?=\n.*\bdone\b)' file | wc -l
示例:强>
$ cat fa
DataMeetingIs11
done
foo
bar
DataMeetingIs11
not
DataMeetingIs11
fio done
$ grep -oPz '.*DataMeetingIs11.*(?=\n.*done)' fa | wc -l
2
答案 1 :(得分:0)
通过使用awk脚本,您也可以这样做:
#!/usr/bin/awk -f
$0 ~ /DataMeetingIs11/ {
line=$0
next
}
$0 ~ /done/ && line != "" {
count++
}
{
line = ""
}
END {
print count
}
示例:强>
$ cat file
blabla
DataMeetingIs11
done
something
DataMeetingIs11
alt
DataMeetingIs11
it's done
此文件的执行结果:
$ ./DataMeetingIs11.awk file
2