1

次のようなパターンの改行で区切られたリストを含むファイル(patterns.txt)があります。

AAAA........
....CCCC....
........YYYY
ATCC

私が検索しているファイル(table.txt)には、次のように表示されます(サイズは120GB)。

ZZZZAAAAGTGT    0   1   12
AAAAGTGTAAYY    0   9   1
GGGGTTTTCCCC    1   0   0
HHHHHHHHYYYY    1   8   0
AAATCCCHHHHH    0   0   1

次のgrepコマンドを使用しています。

grep -f patterns.txt table.txt

これにより、私の例のすべての行が返されます。ただし、grepに最初の12文字だけを表示させることができれば、1行目と3行目は返されません(これは望ましいことです)。

このgrepは、より大きなプログラムの一部です。これは、パターンがファイルから取得される必要があることを意味します。ただし、必要に応じてファイルの内容を変更できます。

すべてのドットをキャラクタークラス[ACGTHY]に置き換えることを考えていました。これは、パターンAAAA........が次のようになることを意味します。

AAAA [ACGTHY] [ACGTHY] [ACGTHY] [ACGTHY] [ACGTHY] [ACGTHY] [ACGTHY] [ACGTHY]

これにより、望ましい結果が得られるはずですが、かなり遅いようです。これを行うためのより良い方法はありますか?

編集:ドットを\Sに置き換えることも検討していました。

4

2 に答える 2

2

もう少し強力なものが必要になります。使用してみてくださいawk

awk 'FNR==NR { a[$1]++; next } { for (i in a) if ($1 ~ i) print }' patterns table

結果:

AAAAGTGTAAYY    0   9   1
HHHHHHHHYYYY    1   8   0
AAATCCCHHHHH    0   0   1
于 2012-11-21T23:26:04.457 に答える
1

pattern.txtを変更できますか?

その場合、^各行の前にaを追加するとうまくいきます。これは、パターンが行を開始する場合にのみパターンに一致します。

于 2012-11-21T14:58:08.793 に答える