私は80のゲノムと5つの染色体を含む巨大なファイルを持っています。 1つの染色体(例:1)から線のみを選択し、SNP変異を示す位置のみを選択する簡単な方法があるかどうか疑問に思います。
1 180754 GGGGGGGCC
1 180755 CCCCCCCCC
1 180756 CCTCCCCTC
1 180757 AAAAAAAAA
1 180759 TTTTTTTTT
3 7874113 TTTTTTTTT
3 7874114 GGGGGGGGG
3 7874115 GGGGGGGGG
3 7874116 GGGGGGGGG
これが私が最終的に得たいものです:
1 180754 GGGGGGGC
1 180756 CCTCCCCT
答え1
あなたの例:
egrep '1 [[:digit:]]+ (GGGGGGGC|CCTCCCCT)' file
---編集:したがって、以下を試してください。
egrep -v '([A-Z])\1{8}' data
答え2
提供されたサンプルデータに基づいてを使用してこれを実行できますgrep
。ヌクレオチドの唯一の有効な値がA、C、G、Tであることを考慮すると、これらの値のみを含む文字セットを作成できます。
$ grep -Ev '([ACGT])\1{8}|^$' sample.txt
1 180754 GGGGGGGCC
1 180756 CCTCCCCTC
これは、単一タイプのすべての結果を無視することによって行われます。正規表現は、[ACGT]\1{8}
AAAAAAAA、CCCCCCCCなどの形式のすべての文字列と一致します。マッチの反転は-v
スイッチを介して行われます。
-v, --invert-match
Invert the sense of matching, to select non-matching lines. (-v
is specified by POSIX.)
-E
引数が上記の引数と一致するようにgrep
正規表現を使用する[ACGT]\1{8}
か、空行(^$
)を使用してください。
-E, --extended-regexp
Interpret PATTERN as an extended regular expression (ERE, see
below). (-E is specified by POSIX.)
2つのパラメータ間の垂直バー(別名パイプ())は|
これを次のようにします。またはその試合状況。
たとえばgrep -Ev "arg1|arg2" <file>
。少し時間がarg1
かかります。[ACGT]\1{8}
arg2
^$
答え3
正確に何を求めるのかよくわかりません。 (あなたの要件を説明してください。役に立つでしょう。)語彙的代わりに意味的に)しかし
sed -r sed -r '/^[0-9]+[[:space:]]+[0-9]+[[:space:]]+(.)\1+\>/d'
3番目のスペースで区切られたフィールドが同じ最初の文字の繰り返しで完全に構成されている行は削除されます(つまり、印刷されません)。
$ sed -r '/^[0-9]+[[:space:]]+[0-9]+[[:space:]]+(.)\1+\>/d' genomes.txt
1 180754 GGGGGGGCC
1 180756 CCTCCCCTC
ゲノムフィールドにのみ大文字を含めることができることがわかっている場合は、より簡単な表現を使用するのが安全でしょう。
sed -r '/\<([A-Z])\1+\>/d' genomes.txt