web-dev-qa-db-ja.com

ATCG以外のものがあるVIの行を見つけます

約500万行のゲノムデータのファイルがあり、A、T、C、Gの文字のみを含める必要があります。問題は、ファイルの大きさはわかっていますが、それより少し大きいということです。つまり、分析で問題が発生したか、ゲノムデータ以外のものを含む行があります。

A、T、C、またはG以外の行を見つける方法はありますか?ファイルの性質上、その他の文字、スペース、数字、記号は含めないでください。私は記号ごとに検索を行ったので、もっと簡単な方法があることを望んでいました。

7
mah

まず第一に、あなたは間違いなくファイルをエディターで開きたくないでしょう(そのように編集するには大きすぎます)。

代わりに、単にidentifyにしたい場合、ファイルにATCおよびG以外のものが含まれているかどうかあなたはそれを行うかもしれません

grep '[^ATCG]' filename

これにより、これらの4文字以外のものが含まれるすべての行が返されます。

ファイルからこれらの文字を削除したい場合は、次のようにします。

tr -c -d 'ATCG\n' <filename >newfilename

(これがファイルを「修正」する正しい方法であるかどうかはわかりません)

これにより、4つのうちの1つではないファイル内のすべての文字が削除され、改行(\n)。編集されたファイルはnewfilenameに書き込まれます。

ファイルに何かを追加したのが系統的なエラーである場合、これはsedまたはawkによって修正される可能性がありますが、データがどのようになっているかはまだわかりません。


ファイルをviまたはvimで開いている場合、コマンド

/[^ATCG]

ATC、またはGではない次の文字を編集バッファーで検索します。

そして:%s/[^ATCG]//gはそれらをすべて削除します。

19
Kusalananda

タイトルに集中した

ATCG以外のものがあるVIの行を見つけます

そして、これをVIエディター、いわゆる「ラストラインモード」からテストしました。

:%!tr -c -d 'ATCG\n

:コマンドラインモードに入ります。%ファイル全体を範囲として一致させます。!外部コマンドで範囲を絞り込むtr -c -d 'ATCG\nそれはたまたま@Kusalanandaが書いたのと同じです:)。

0
prosti