grepとスペースを含むForループ

grepとスペースを含むForループ

forループとgrepを同時に使用しようとすると、空白に少し問題があるようです。たとえば、「k117_196509」ではなく「k117_19650」を一致させようとするため、スペースが重要です。どうぞよろしくお願いします!

for i in 'k117_19650 ' 'k117_460555 ';do
    grep -A1 $i final.contigs.fa >> gene.fa
done

答え1

直面している問題は、シェル変数の使用に関連しています。特に、スペースなどの「非標準」文字を含む変数を使用する場合、常に変数を引用してください。これを使用する場合は、ここで議論を参照してください。

あなたの場合:

grep -A1 -- "$i" final.contigs.fa >> gene.fa

トリックを実行する必要があります(で始まる値を--避けるためにここに1つを追加してください)。$i-

答え2

これを区別するには(「k117_19650」と一致しますが「k117_196509」と一致しません)、whichを使用して部分文字列の代わりに単語全体を検索させることができ-wますgrep

for i in k117_19650 k117_460555 ;do
    grep -w -A1 "$i" final.contigs.fa >> gene.fa
done

関連情報