如果匹配,awk命令打印最后5行
问题描述:
我有一个xml文件。我需要在匹配的文本前打印五行。如果匹配,awk命令打印最后5行
可能有多个匹配项。我正在使用以下仅返回一行的awk命令。
awk '/<\/ABC>/' file.xml
回报
<ABC>Some Text1</ABC>
<ABC>Some Text2</ABC>
<ABC>Some Text3</ABC>
预计:
... previous 4 lines ...
<ABC>Some Text1</ABC>
... previous 4 lines ...
<ABC>Some Text2</ABC>
... previous 4 lines ...
<ABC>Some Text3</ABC>
无法使用grep -B
as per in Solaris:
grep的:非法选项 - B的grep:非法选项 - 2用法:grep的-hblcnsviw图案文件
答
这件怎么样?
awk '(NR>1){{a[NR]=$0;if($0~/<\/ABC>/){for(i=NR-4;i<=NR;i++){print a[i]}}}}' input.txt
答
对于Solaris:
nawk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=2 a=4 s="string" file1
“B” - >数要在字符串“s”之前打印的行。
“a” - >字符串“s”后打印的行数。
的Linux:
grep -B4 '<ABC>' file.xml
它很好。但它不打印匹配的行。只打印前面的行 – logan
更改的代码以打印匹配的行。 – chidori
它也可以在linux机器上工作吗? – logan