我需要在grep输出前查看5行。
我使用了命令,
grep -B 5 pattern filename但是抛出了错误/usr/bin/grep: illegal option --B
如何处理这种情况,并在grep语句前查看5行?
发布于 2014-06-06 06:39:19
您是否考虑过使用awk
如果这是一个可行的选项,请选中下面这一行:
$ awk '/PATTERN/{for(i=1;i<=x;)print a[i++];print}{for(i=1;i<x;i++)a[i]=a[i+1];a[x]=$0;}' x=5 file上面的命令将返回匹配模式和匹配模式之前的5行(即总共6行,而grep -B 5总共返回5行,包括匹配的那一行)。
x指定行数
我希望这能帮到你。
发布于 2014-06-06 13:58:00
Simply_Me的答案是正确的,但在每次不匹配时都会复制前面的所有行。(nit挑剔的技术性:即使gawk的实现避免了复制字符串本身,它仍然必须重新散列索引)。所以,仍然坚持使用awk:
#!/usr/bin/awk -f
BEGIN { cl=1; }
/foo5/ {
for (i=cl; i<cl+N; i++)
print pLines[i % N];
cl=1;
}
{ pLines[cl % N] = $0; cl = cl + 1; }cl代表当前行。如果有匹配项,我们将打印之前存储在pLines数组中的N行。您可能希望打印图案本身,但我没有。不管看到的是什么模式,我们都使用%运算符将刚刚处理过的行存储在pLines中,因此我们不必移位数组。
为
zoo0
blah1
foo2
bar3
hehe4
lisp5
foo5
blah6
foo7
bar8
hehe9
foo5这是打印
blah1
foo2
bar3
hehe4
lisp5
foo5
blah6
foo7
bar8
hehe9这是不包括模式的前5行。
它还可以在
hehe4
lisp5
foo5
blah6
foo7
bar8
hehe9
foo5其中在第一次匹配foo5之前没有5行。在本例中,它打印空行。您可能需要为您的需求量身定做。
https://stackoverflow.com/questions/24058278
复制相似问题