実験データを 4 行のグループにまとめたテキスト ファイルがあります。まれなデータポイントを削除したいと思います。以下は最初の 8 行のファイル形式で、これが何千行も繰り返されます (行番号はファイルに存在しません)。
1 Info_1
2 Sequence_1
3 Info_1
4 Info_1
5 Info_2
6 Sequence_2
7 Info_2
8 Info_2
9 Info_3
10 Sequence_3
11 Info_3
12 Info_3
したがって、行 1 ~ 4 にはシーケンス 1 の情報が含まれ、行 5 ~ 8 にはシーケンス 2 の情報が含まれ、9 ~ 12 行にはシーケンス 3 の情報が含まれます。特定の状況では、完全に一意であるか、3 回未満しか検出されていないシーケンスを含む 4 行のグループを削除するのが一般的です。
私がやりたいのは、2行目を6、10、14、18行と比較することです...そしてそれが3回以上見つかった場合は何もしません。見つかった回数が 3 回以下の場合は、行 1 ~ 4 と、一致するシーケンスを含む 4 行の各グループを削除します。次に、ファイル内の 1 行おきに同じ比較を実行します。
したがって、上記のファイルのシーケンス 1 とシーケンス 3 が一致し、そのシーケンスが 3 回未満しか繰り返されていないため、4 行の各グループを削除すると、結果のファイルは次のようになります。
1 Info_2
2 Sequence_2
3 Info_2
4 Info_2
これが私が始めたものです:
awk 'FNR==NR {
if (FNR%4==2) {
a[$1]++
if (a[$1]<3) b[int(FNR/4)]=1
}
next}
b[int(FNR/4)]==0' inputFile inputFile > outputFile
ただし、見つかった回数が 3 回未満のすべての行が削除されるわけではありません。助けていただければ幸いです。ありがとう。
要求された実際のテスト可能な例を次に示します。 入力:
Info1
AAGC
Info1
Info1
Info2
AACT
Info2
Info2
Info3
AAGC
Info3
Info3
Info4
AAGC
Info4
Info4
Info5
AACT
Info5
Info5
AAGC
回数が発生しますが、>= 3
回数がAACT
発生するため<3
、出力は次のようになります。
Info1
AAGC
Info1
Info1
Info3
AAGC
Info3
Info3
Info4
AAGC
Info4
Info4
うまくいけば、それが明確にするのに役立ちます。