私は、文字A、T、C、Gだけを含める必要がある約500万行の長さのゲノムデータファイルを持っています。問題は、ファイルサイズがどれだけ必要かを知っていますが、それより少し大きいことです。これは、分析に問題が発生したか、一部の行にゲノムデータ以外のコンテンツが含まれていることを意味します。
A、T、C、G以外の行を見つける方法はありますか?ファイルの性質上、他の文字、スペース、数字、記号は表示しないでください。シンボルごとにシンボルを検索したので、より簡単な方法があることを願っています。
答え1
まず、エディタでファイルを開きたくないでしょう(この方法で編集するには大きすぎます)。
逆にただ欲しいなら確認するファイルにA
以外の内容が含まれている場合は、次のものを使用できます。T
C
G
grep '[^ATCG]' filename
これにより、この4文字以外の内容を含むすべての行が返されます。
欲しいなら削除ファイル内のこれらの文字は次のとおりです。
tr -c -d 'ATCG\n' <filename >newfilename
(これがファイルを「修正」する正しい方法であるかどうかはわかりません)
これにより、ファイルからこれらの4文字のうちの1つ以外のすべての文字が削除され、改行文字(\n
)も保存されます。編集したファイルはに記録されますnewfilename
。
ファイルに何かを追加したことがシステムエラーの場合、またはsed
を介して修正できますが、awk
まだデータがどのように見えるかわかりません。
vi
ファイルを開くvim
か、コマンドを実行すると
/[^ATCG]
A
、T
またはではなく、編集バッファの次の文字がC
見つかりますG
。
そして:%s/[^ATCG]//g
すべて削除します。
答え2
タイトルに集中しました。
ATCGではなくVIの行を探す
私はこれを「最後の行モード」と呼ばれるVIエディタでテストしました。
:%!tr -c -d 'ATCG\n
:
コマンドラインモードに入り、%
ファイル全体を範囲に一致させ、!
@Kusalanandaが書いたのと同じ外部コマンドで範囲をフィルタリングします。 :)tr -c -d 'ATCG\n