列値に基づいてファイルを行に分割する

列値に基づいてファイルを行に分割する

入力ファイルは次のとおりです。

chr1    1    G    300
chr1    2    A    500
chr1    3    C    200
chr4    1    T    35
chr4    2    G    400
chr4    3    C    435
chr4    4    A    223
chr4    5    T    400
chr4    6    G    300
chr4    7    G    340
chr4    8    C    400

実際のファイルが大きすぎて処理できないため、特定の範囲内で染色体(1列)と位置(2列)でフィルタリングして、より小さなファイルを出力したいと思います。

chr4たとえば、場所3から7までフィルタリングするLinuxコマンド(sed、awk、grepなど)を探しています。希望の最終出力は次のとおりです。

chr4    3    C    435
chr4    4    A    223
chr4    5    T    400
chr4    6    G    300
chr4    7    G    340

元のファイルを変更したくありません。

ベストアンサー1

潜在的にソートされていない入力ファイルの解決策:

sort -k1,1 -k2,2n file | awk '$1=="chr4" && $2>2 && $2<8'

出力:

chr4    3    C    435
chr4    4    A    223
chr4    5    T    400
chr4    6    G    300
chr4    7    G    340

入力ファイルがソートされている場合は、以下を使用すれば十分です。

awk '$1=="chr4" && $2>2 && $2<8' file

おすすめ記事