1

フォーラムでこの問題の解決策を見つけようとしましたが、解決策のいくつかを理解することもできませんでした。

私はDNAデータを扱っていますが、2つのファイルがあります。最初のファイル(a)は、すべてのシーケンスヘッダーを含むファイルです。(名前など)各ヘッダーには独自の行があります。例:

>title1
>title2
>title3
>some other title

2番目のファイル(b)には、これらのヘッダーの内容が含まれています。各行は1番目のファイルに対応します。

GAGTTGGAAAGAG
GCTGCCCTGAGATCGTNNNN
GTGCAGTGATNNAGTG
ACTG

シーケンス内の未知の文字を検索するプログラムを作成しています。通常、ファイル2にはACTとGの文字しか含まれていないと想定します。

2つのファイルを作成したい:

  • ヘッダーとシーケンス(1番目のタブ=ヘッダー、2番目のタブ=シーケンス)の両方を含み、ACTとGのみを含むエントリを含むファイル
  • 今回のみ、ヘッダーとシーケンス(1番目のタブ=ヘッダー、2番目のタブ=シーケンス)の両方を含むファイルには、他の文字を含むエントリのみがあります。(たとえばN)

私はこれまでこれを試しました:

while read line; do
    echo "$line" | tr -d "A" | tr -d "C" | tr -d "T" | tr -d "G" | tr -d "\n" | wc -c
done <sequenceOnly.txt >unkownLines.txt

これは、(b)ファイルで不明な文字が発生する頻度を計算します。この値が0より大きい場合、この行を使用してヘッダーとシーケンスをunknownLines.txtファイルに配置したいのですが、行き詰まります:/

期待される出力ファイル1(ACTGのみ):

>title1             GAGTTGGAAAGAG
>some other title   ACTG

期待される出力ファイル2(他のものがあります):

>title2            GCTGCCCTGAGATCGTNNNN
>title3            GTGCAGTGATNNAGTG
4

1 に答える 1

2

まず、paste でデータをまとめてから、awk で分離します。

paste header sequence | 
    awk '$NF ~ /^[ACTG]*$/ {print > "file1"; next }1'  > file2

貼り付けにより、データが 2 つの列に配置されawk、最後の列に文字のみが含まれているかどうかがチェックされますACTG。存在する場合、その行はファイルに書き込まれますfile1。(空のシーケンスも表示されます。) そうでない場合、行は に書き込まれfile2ます。

于 2013-01-22T17:29:28.847 に答える