範囲が最大の行を保持

範囲が最大の行を保持

以下のファイル(fileA)があります。

>ENST00000614578.1 gene=WASP12 CDS=1-526
>ENST00000581055.1 gene=PTP2 CDS=138-579
>ENST00000577541.1 gene=PTP2 CDS=1-81
>ENST00000423485.5 gene=PTP2 CDS=160-4752
>ENST00000367142.4 gene=PRPF40B CDS=304-1032
>ENST00000366955.7 gene=WASP12 CDS=169-9511

CDS値の範囲が最も大きい行だけを維持したいと思います。範囲は 3 番目の列の CDS 値で指定されます。たとえば、最初の行の範囲は525(526-1)、2番目の行の範囲は441(579-138)です。

希望の出力:

>ENST00000423485.5 gene=PTP2 CDS=160-4752
>ENST00000367142.4 gene=PRPF40B CDS=304-1032
>ENST00000366955.7 gene=WASP12 CDS=169-9511

ソートしてみました。

sort -nrk3,3  fileA 

しかし、私はこれが行く道ではないと思います。どんな提案がありますか?フィルタリング基準は、同じ遺伝子名を持つ行の範囲の最大値を取ることです。

ベストアンサー1

新しい情報を見てここに来ました

awk -F'[ =-]' '{ print $0" "$6-$5 | "sort -k4nr" }' fileA | \
cut -d' ' -f1-3 | \
awk -F'[ =]' '!seen[$3]++'

出力:

>ENST00000366955.7 gene=WASP12 CDS=169-9511
>ENST00000423485.5 gene=PTP2 CDS=160-4752
>ENST00000367142.4 gene=PRPF40B CDS=304-1032

これは間違いなく1つのコマンドで行うことができますが、awkまだ使い方を学んでいます。



OP編集前の以前の回答:

最小値が700(例の出力と一致するように)であると仮定すると、次のことを試すことができます。

awk -F'[=-]' '$4-$3 > 700' fileA

出力:

>ENST00000423485.5 gene=PTP2 CDS=160-4752
>ENST00000367142.4 gene=PRPF40B CDS=304-1032
>ENST00000366955.7 gene=WASP12 CDS=169-9511

-F'[=-]'=とを-列区切り文字として使用して、列3と4になります。

1 526
138 579
1 81
160 4752
304 1032
169 9511

$4-$3 > 700:4番目の列から3番目の列を引いた値が700より大きい行を選択します。

おすすめ記事