簡體   English   中英

awk打印匹配的行和匹配的行

[英]awk print matching line and line before the matched

以下是我嘗試使用awk做的事情。 獲取與正則表達式匹配的行以及匹配和打印之前的行。 我可以得到與正則表達式匹配的行,但不能得到緊接在它之前的行:

awk '{if ($0!~/^CGCGGCTGCTGG/) print $0}' 

在這種情況下,您可以使用grep輕松解決它:

grep -B1 foo file

但是,如果您需要使用awk:

awk '/foo/{if (a && a !~ /foo/) print a; print} {a=$0}' file
/abc/{if(a!="")print a;print;a="";next}
{a=$0}

我創建了以下awk腳本。 打印匹配行以及前兩行。 您可以根據此想法使其更加靈活。

search.awk

{
    a[0]=$0;
    for(i=0;i<2;i++)
    {
       getline;
       if(i==0){
            a[1]=$0;
       }
       if(i==1){
            if($0 ~ /message received/){
                print a[0];     
                print a[1];
                print $0;
            }
       }
    }
}

用法:

awk '{print $0}' LogFile.log | awk -f search.awk

使用更直接的模式搜索

gawk '{if (/^abc$/) {print x; print $0};x=$0}' file1 > file2

也許有點題外話,但是我使用了belisarius的答案來創建我自己的上述解決方案的變體,它搜索第N個條目,然后返回該行和上一行。

awk -v count=1 '/abc/{{i++};if(i==count){print a;print;exit}};{a=$0}' file

為什么不使用grep -EB1 '^CGCGGCTGCTGG'

awk做同樣的事情很費時,請參閱Marco的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM