次のようなタブ区切りファイルから冗長データを削除しようとしています
chr1 1841 1851 4
chr1 1991 2001 3
chr1 2491 2501 2
chr1 2491 2501 2
chr1 2501 2511 1
chr1 2681 2691 3
chr1 2881 2891 4
chr1 2891 2901 1
chr1 3241 3251 1
chr1 3241 3251 6
条件: 最初の 3 つの列が同じ場合、4 番目の列の値 (最大値) を使用して、最初の 3 つの列と 4 番目の列を取得する必要があります。同点の場合は、4 列の値を 1 回だけ出力する必要があります。
したがって、上記の入力の場合、理想的な出力は
chr1 1841 1851 4
chr1 1991 2001 3
chr1 2491 2501 2
chr1 2501 2511 1
chr1 2681 2691 3
chr1 2881 2891 4
chr1 2891 2901 1
chr1 3241 3251 6
私がどのようにアプローチしたか:
最初にファイルをソートしてから、めちゃくちゃにしました
sort file | awk -F '\t' 'NR==1{last = $1; max = 0} {if (last != $1) {printf "%s\t%e\n", last, max; last = $1; max = $4} else if (max < $4) max = $4} END{printf "%s\t%e\n", last, max}'
親切に助けて