私は、パターンマッチングの前後に5行を印刷するためにSolarisでawkを使用しています。現在、次の1行のコードがアクションを実行しています。
/usr/xpg4/bin/awk '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=5 a=5 s="ERROR" file
しかし、結果は満足できなかった。まず、次のような不要な行が含まれています。
- ゲーム自体に関連するセリフ
- 空行
- (不要な)パターンに一致する行。
- 削除する
- 無意味な言葉
- 愚かな
また、各塩基はダッシュを含む線で区切る必要があります。
入力例:
stupid
remove
keep it
*
MATCH
keep it as well
remove
important
*
MATCH at line 2:
needed
also
this line should be kept
*
MATCH at line 2:
this to save
very important
remove
keep it
*
MATCH
keep it as well
nonsense
another nonsense
予想出力:
keep it
keep it as well
---
important
needed
also
---
this line should be kept
this to save
very important
---
keep it
keep it as well
エレガントな方法で実装するには?
答え1
まだ予想される出力は明確ではありませんが、試してみましょう。 Solarisにgnuユーティリティがある場合は、非常に簡単な方法でgawkとggrepを使用できます。
gawk 'NF > 0' fileName |ggrep -C5 pattern
不要な単語をフィルタリングするには、最後に| ggrep -v somePatternを追加できます。