以下は私がawkを使ってやろうとしていることです。正規表現とマッチする行を取得し、マッチして印刷する直前の行を取得します。あなたは簡単にはgrepでそれを解決することができ、この場合にはawkの一致する行と行が一致する前に一致する
awk '{if ($0!~/^CGCGGCTGCTGG/) print $0}'
以下は私がawkを使ってやろうとしていることです。正規表現とマッチする行を取得し、マッチして印刷する直前の行を取得します。あなたは簡単にはgrepでそれを解決することができ、この場合にはawkの一致する行と行が一致する前に一致する
awk '{if ($0!~/^CGCGGCTGCTGG/) print $0}'
:
grep -B1 foo file
をしかし、あなたが使用する必要がある場合、私はその直前の正規表現ではなく、行にマッチした行を取得することができますAWK:
awk '/foo/{if (a && a !~ /foo/) print a; print} {a=$0}' file
awk 'はどうでしょうか?{if($ 0〜/> /)head = $ 0; getline} {if($ 0〜/ CGCGGCTGCTGG /)プリントヘッド "\ n" $ 0}' ..これは正しいですか? – Sudeep
@ Sudeep:あなたはそれが正しいかどうかをテストすることで自分自身に言うことができます...しかし、それはマルコの提案よりも長くて分かりにくいので、どうして迷惑でしょうか? – Cascabel
ありがとうございましたJeromi、はい、私はテストすることができます...私はですが、getlineはちょっと混乱していました。これが誰かがコマンドを見て、フラグを立てることができることを確認するために投稿しました:) – Sudeep
/abc/{if(a!="")print a;print;a="";next}
{a=$0}
スクリプトで「bcd \ nabc \ nabcdef」のようなケースが正しく処理されない –
これを考慮して修正されました。 –
使用より簡単なパターン検索
gawk '{if (/^abc$/) {print x; print $0};x=$0}' file1 > file2
が、私はを検索し、上記溶液の私自身のバリエーションを作成するために、ベリサリウスからの回答を使用Nthエントリを返し、前の行を返します。
awk -v count=1 '/abc/{{i++};if(i==count){print a;print;exit}};{a=$0}' file
私は次のawkスクリプトを作成しました。一致する行だけでなく、前の2行も印刷します。あなたはこの考えからより柔軟にすることができます。
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
は考え線3,4が正規表現と一致します。 2,3,4を表示したいですか? –