2016-05-14 24 views
0

ちょっと複雑なパターンを検索したいのですが、私は既に\ |の代わりに|この正確なパターンに一致するように空白を含めるにはどうすればよいですか?awkの空白を含むパターンを検索するには?

TR40663|c0_g1_i2|m.33339 TR40663|c0_g1_i2|g.33339 ORF TR40663|c0_g1_i2|g.33339 TR40663|c0_g1_i2|m.33339 type:5prime_partial len:1730 (+) TR40663\|c0_g1_i2:3-5192(+) [specie] 

私は〜/また、コードをいじっている場合、私は知らないパターン

awk 'BEGIN{RS=">";FS="\n"}NR>1{if ($1~/pattern) print ">"$0}' file 

と関連配列を取得し、このコードを使用する必要があります。後で、複数のファイルの中に要素のリストを渡しますが、今はこのパターン/検索を最初にチェックしたいと思います。ヘルプ

+0

なぜgrepを使用しますか? – stark

+0

@stark grepはgrepを使用できません。これは、grepは行ベースであり、awkのようなレコードベースではないため、grepを使ってレコード区切りを指定して複数行レコードを検索して印刷することはできません。ポスターは改行の代わりに '>'を使ってレコードを区切ります。 Andres - '〜/'は演算子ではありません。 '〜'は演算子で、 '/.../'は静的な正規表現の区切り文字です。構文エラーが既にあなたに指示していると確信しているので、 '〜/'から '/'を取り除いてください。 –

+0

空白は正規表現パターンに特別な意味を持たないので、特別な意味を持たせる必要はありません。 – Barmar

答えて

0

~/ため

おかげでオペレーターではありません。 ~は正規表現コンパイル演算子であり、/.../は静的正規表現デリミタです。 /~/から取り除いてください。構文エラーが既にあなたに指示していると確信しています。

dymamic正規表現を使用するための構文は次のとおりです。

awk -v re='foo \\| bar' '$0 ~ re' file 

か:

awk -v re='foo [|] bar' '$0 ~ re' file 

それは曖昧で誤解を招くだところでとして、単語patternを使用しないでください。 awkでは、regexpまたはstringという単語を使用するべきですが、シェルはを使用しますが、機能と構文は正規表現と似ていますが、セマンティクスは非常に異なります。 patternは、正規表現を表す文字列を保持しているawkの変数ある場合

+0

彼のコードは '$ 1'ではなく' $ 1'にマッチします。 – Barmar

+0

はいと彼のコードでは '\ n 'ではなくレコードの区切り文字として'> 'が使われます。私は確信している動的な正規表現の比較構文を彼は彼が残りの作業をすることができます質問です。 –

+0

しかし、どのように空白を含めることができますか?私はその正確な文字列に一致する必要があります。私はそれをそのまま返していくつかのレコードを返します。私はその長い行をスペースでマッチさせる必要があるので、私はただ一つのレコード(レコード自体と下のテキストまたはシーケンスです)あなたの助けをありがとう –

0

は、その後、あなたはなしで

if ($1 ~ pattern) 

をスラッシュ記述する必要があります。

  • ~/

    は、awkの演算子
  • ではありません。

    if ($1 ~ /pattern\|goes\|here/) 
    

    注:

    patternは、実際の正規表現のためのあなたの問題のプレースホルダがある場合は、最後にスラッシュが欠落しています

  • 正規表現マッチング演算子は~
  • 正規表現のパターンはスラッシュ:/foo.*bar/
+0

はい、私は最終的なことが間違っていますが、このコードはこの{if($ 1〜/ TR40663 \ | c0_g1_i2 \ | m.33339)のような行でうまくいきました。私の質問は、空白を追加していくつかのマッチを返すことを避ける方法です。ただ1つのマッチだけが必要です。ちょうどそのスペースにはたくさんのスペースが含まれています。 –

+0

その文字列が正確に必要な場合は、パターンマッチングではなく文字列等価( '==')を使用します。 –

+0

もう一度お悔やみ申し上げます。$ 1 ==> TR10023 | c0_g1_i1 | m.6923 TR10023 | c0_g1_i1 | g.6923 ORF TR10023 | c0_g1_i1 | g.6923 TR10023 | c0_g1_i1 | m.6923タイプ:完全len:176 - )TR10023 | c0_g1_i1:452-979( - )[name])またその文字列は ""ですが、一致するものが見つかりませんでした。私が見つけたいと思った行を貼り付けました。 geditを使ってそれを再確認します。 - –

関連する問題