変化する行を表示する方法を選択してください。

変化する行を表示する方法を選択してください。

私は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

関連情報