2017-01-22 8 views
-1

私は数行にわたってループするforループを持っています。各行は、それらを分離タブで2つの文字列を持っ例えば タブを含む文字列を含む変数上のgrep

chr11 105804693 

私はそれが"105804693: No such file or directory"を返すに検索するファイルをgrepするための変数を渡し

。私のコードは次のようになります:

for $(cat list_of_lines); do grep $ line file_to_search_in >> output_file; は

私は printf変数にしようとした

を行って、それが"chr11"を返されたが、私は、変数をエコーするときには、"chr11 105804693"

どのように私は、変数に対してgrepを呼び出すことができますし、それは完全なラインを探していますが返さ?

+2

あなたのコードを質問に追加してください。 – Cyrus

+2

ループの本体から 'grep'を呼び出す場合は、' grep'を一度呼び出すだけで良い解決法があるかもしれません。 – chepner

+2

wrt '私はループをいくつかの行に渡ってループしています.' - 最初の文は問題の根を特定します。 [なぜシェルを使ってループを処理するかをテキストで判断する](http://unix.stackexchange.com/questions/169716/whyis-using-a-shell)を参照してください。 -loop-to-process-text-consider-bad-practice) –

答えて

2

あなたはおそらくあなたの変数が言葉chr11 105804693を持っていたので、shellはデフォルトIFS(フィールド区切りで複数の単語に単語を分割し、

search_pattern_variable="chr11 105804693" 
grep "$search_pattern_variable" input-file 

を検索パターンを持つあなたの変数を囲む引用符を追加していません)、パターンとしてchr11を使用し、ファイル名として105804693を使用しましたが、そのようなファイルは表示されません。

の意味はbashです。

+3

変数参照はほとんどの場合、二重引用符で囲む必要があります。これは、シェルスクリプトで最も一般的な初心者のミスの1つです。 [shellcheck.net](http://www.shellcheck.net/)(推奨、BTW)は二重引用符で囲まれていない変数参照を自動的にエラーとしてフラグを付けます。 –

+0

shellcheck.netありがとう。それは本当に便利に見えます。 – Amos

関連する問題