我的文件内容如:
E error1
error1.2
error1.3
error1.4
error1.5
E error2
error2.2
error2.3
error2.4
error2.5
E error1
error1.2
error1.3
error1.4
error1.5
S not error
我想返回与“E错误”相匹配的任何内容以及之后的4行。我可以用'sed'作首次出现:
sed -n '/E/,5p'
但这只返回第一次出现'E error'的5行。我需要它为所有出现 我还想重复数据删除,然后计算每种类型的总数,并在5行返回下面打印出'E error1'的出现次数。
希望有意义!
答案 0 :(得分:2)
使用grep
及其-A
(之后)选项:
grep -A4 'E error' file
要获得每种类型的计数,您可以
grep 'E error' file | sort | uniq -c
答案 1 :(得分:2)
这里有一个awk
,你会在点击模式后获得下一个四行:
awk '/E error/{_=5}_-->0' file
E error1
error1.2
error1.3
error1.4
error1.5
E error2
error2.2
error2.3
error2.4
error2.5
E error1
error1.2
error1.3
error1.4
error1.5
或者你可以使用它:
awk '/E error/{_=5}_&&_--' file
PS,_
仅用于娱乐,但就像任何awk
变量名一样。为了使其更具可读性:
awk '/E error/{c=5} c && c--' file
答案 2 :(得分:1)
sed -n '/E error/,+4p' inputFile
将输出显示为
E error1
error1.2
error1.3
error1.4
error1.5
E error2
error2.2
error2.3
error2.4
error2.5
E error1
error1.2
error1.3
error1.4
error1.5
它的作用是什么?
-n
禁止自动打印模式空间
'/E/,+4
匹配其后跟E
和4
行出现的行
p
打印当前模式空间
答案 3 :(得分:0)
您的输入文件在记录之间有一个空行,因此只需将awk记录分隔符设置为匹配,您只需要:
awk -v RS= '/^E error/' file