2016-11-03 5 views
1

Linux端末とGAWKで作業をしています。目的は正規表現のリストを抽出し、この表現に関連付けられた遺伝子のカウンタを作ることです。GAWKの "In in"状態です。

すべての正規表現でこれを行うようにGAWK式を設定できましたが、リストのすべての式に対してこれを実行する必要があります。

このような条件を設定する方法はありますか?If(RegExp is RegExpList)i ++ 1?

RegExpList["RegExp"] = 1; 

をしてから、この文を使用します:

+0

現在のソリューションは間違ったアプローチです。簡潔でテスト可能なサンプル入力と期待される出力を含む[mcve]を投稿すると、私たちはあなたを助けることができます。あなたがawkの質問をしているなら、gawkはちょうどawkの1つのフレーバーです。なぜなら今のところ誰もあなたを訂正してくれなかったawkよりはるかに少ない人がgawkタグで質問しているからです。 –

答えて

2

あなたは配列としてRegExpListを宣言することができRegExpある

if(c in RegExpList){do something;} 

c場合は、条件が真となります。

参照のためgawk manualを参照してください。

+0

答えをありがとう。実際には意味があります。問題は、ファイル入力からこれをどうやってやるかということです。 – Hjorvik

0

私はこのようにそれを行うために管理:

gawk 'BEGIN{i=0} 
{while ((getline line < "regexpinput.txt") !=FN) RegExpList[line]=1; 
if ($4 in RegExpList) i++1} 
END{print i}' tabular_file.txt 

おかげで助けを求め@nopasara。

awk ' 
NR==FNR{ re = (NR>1 ? re "|" : "") "(" $0 ")"; next } 
$0 ~ re { cnt++ } 
END { print cnt+0 } 
' regexpinput.txt tabular_file.txt 

ていますが、我々は確かに知っているよMCVEを投稿する場合:

+0

これはgetl​​ineを間違って使用しています(いくつかの失敗では無限ループにスピンします - http://awk.freeshell.org/AllAboutGetline参照)、表形式ファイルのすべての行についてregexpファイル全体を読み込んでいますregexpの比較とidkの代わりに文字列の比較 'i ++ 1'と解釈されますが、それは間違っています。だからあなたがしたいことは何でも、これはそうではありません。 –

0

チャンスはこれが正しいアプローチです。