
複数の大きなテキストファイルがあり、ファイルにはUNIQS.txt
他のファイルの文字列のリストがあります。grep
私が使用するコードは
grep -f UNIQS.txt EEP_VSL.uniqs.sam > UNIQ_templates.sam
何もしません。結果ファイルは空です。しかし、私がするとき
grep -F -f UNIQS.txt EEP_VSL.uniqs.sam > UNIQ_templates.sam
うまくいきます。grep
ファイル内の項目がUNIQS.txt
(ファイルにない)引用符とスラッシュなしで正規表現パターンとして解釈されるとは思わないので、これは私を混乱させます。通常、ファイルからパターンを取得すると、自動的に正規表現パターンだと思いますか?
編集する:ファイルには、UNIQS.txt
次の形式の改行で区切られた文字列があります。
HWI-ST365:215:D0GH0ACXX:2:1101:10034:186783
(テンプレート名と呼ばれます)と[ファイル]EEP_VSL...
タブで区切られた列が14個ほどあり、最初の列がテンプレート名なので、基本的にファイルから各テンプレートに対応する行を抽出したいと思います。
答え1
この-f
オプションは、grep がパターンを読み取るファイルを指定します。これは、コマンドラインからパターンを渡すのと似ています(-e
または複数のパターンがある場合はオプションを使用する)。ただし、シェルから呼び出すときにシェルで拡張される特殊文字を保護するためにパターンを引用する必要があるかもしれません。
引数-E
または-F
(-P
存在する場合)は、パターンが作成された構文をgrepに通知します。引数がない場合はgrepが期待されます。基本正規表現;with -E
、 grep 期待拡張正規表現; -P
(サポートされている場合)、grepが期待されます。パール正規表現;の場合、-F
grepはリテラル文字列を期待します。パターンがコマンドラインから出るのかファイルから出るのかは関係ありません。
文字列は部分文字列です。a+b
これをパターンとして渡すと、埋め込みa+b+c
行が一致します。指定された文字列の1つだけを含み、それ以上含まれない行を検索するには、この-x
オプションを渡します。
答え2
私は同じエラーがありましたが、@gillesの素晴らしい答えで解決できませんでした。入力ファイルをよく見ると、最後に2つの改行があることがわかります。これがなければ成功するには: grep -i file_pattern_input file
(GNU grep 3.1、5000を超えるレコードを含む入力ファイル、一致する/ patternファイル2536、すべての2536がファイルに存在する必要があることを知っています。改行を使用すると、ファイル内のすべての行に一致する2536行のみを取得します)