2016-05-19 5 views
0

grepを使用しているのと同じ方法でawkで検索語句を強調表示できますか?次のファイルAwk - カラーマルチラインパターン(grepなど)?

>gene

AAATTTGCAGAGATTACAGGGGGGG

太字が着色テキストでここgrepコマンド$ grep --color=auto GATTACA file.txt

AAATTTGCAGAGATTACAGGGGGGG

を作り出す考える

私が実際に使用しているファイルは、複数の行にまたがるパターンを持つため、grepではなくawkを使用しています。だからではなく、ファイルには、次のようになります。

> gene

AAATTTGCAGAGAT

TACAGGGGGGG

と私は私の句

gene

AAATTTGCAGAGATTACAGGGGGGG

を返す

awk 'BEGIN{RS=">"; FS="\n";}/GATTACA/{print$0}' file.txt 

でレコードを印刷するには、次のawkのコードを使用することができますが、私は私をしたいと思いますパターンは色です(grep cmdのように):

gene

AAATTTGCAGAGATTACAGGGGGGG

私はまだUNIXとawkの新機能であるので、どんな助力もあれば幸いです。この質問は、How to print awk's results with different colors for different fields?の重複ではありません。この質問は、フィールド全体ではなく、の検索語であるの色を付けることを求めている点で異なります。技術的に私は全体のフィールド{print$0}を印刷しているので、返された結果全体が色を変えます。

awk 'BEGIN{RS=">"; FS="\n";}/GATTACA/{print "\033[0;32m"$0"\033[0m"}' file.txt 

戻り

gene

AAATTTGCAGAGATTACAGGGGGGG

また、私はこれを試してみました:

awk: (FILENAME=nametest.txt FNR=1) fatal: division by zero attempted

私はちょうど組み込むするかどうかはわかりません。ただ、エラーを返す

awk 'BEGIN{RS=">"; FS="\n";}"\033[0;32m"/GATTACA/"\033[0m"{print$0}' file.txt 

カラーコードを検索語にのみ入力します。私のawkコードを完全に再フォーマットする必要があるかもしれません。私にお知らせください!再度、感謝します!

+0

そのスレッドから試されたソリューションですが、検索語だけを強調表示できませんでした。代わりに、フィールド全体が色付けされています。おそらく、複数行の検索を行い、フィールド全体を '{print $ 0}'で返す必要があります。どのようにそれを回避するか分からない。ありがとう! – moxed

+0

検索用語のみを色付けするには、次のような色コードを持つgsubを使用できます。 'BEGIN {RS ="> "; FS = "\ n"; gene = "GATTACA"} ' ' $ 0〜gene {gsub(gene、 "033 [0; 32m&\ 033 [0m"、$ 0); print $ 0} ' ここで'& 'は見つかったものです(GATTACA)。 –

答えて

0

ラースフィッシャーはcommentでこれに答えました。このコミュニティWikiの投稿はそれを正式化(および改善)します。のみ検索用語を色付けする

、あなたがそれらのカラーコードでグローバル置換(gsub)を使用することができます

awk 'BEGIN { RS=">"; FS="\n" } gsub(/GATTACA/, "\033[0;32m&\033[0m", $0)' file 

これは>ではなく、デフォルト\n(改行をレコードセパレータ(RS)を設定します)とフィールドセパレータ(FS)をデフォルトの他の空白文字ではなく\nに設定します。次に、そのクエリに対してグローバル置換を実行し、テキストを適切なカラーコードで囲まれたテキストに置き換えます。

gsubは、置換の数を返します。コマンドを使用しない句はデフォルトで表示されるため、このコードは句として置換を実行します。したがって、置換が行われた場合にのみawkが印刷されます。 (gsubは、置換がない場合は0(偽)を返し、置換がある場合は0(真)を返します)。