2016-04-19 12 views
0

は、列内のユーザー定義の距離内の数値をグループ化し、bashのファイル内の別の列の対応する値を合計したいとします。ここ は、サンプルファイル列のグループ番号とbashの別の列の合計

D seq 1876 A seq 3802 31 
D seq 1877 A seq 3803 104 
D seq 13691 A seq 14117 15 
D seq 13694 A seq 14120 65 

は、ユーザーが5にマージする距離を定義する場合は、サンプル出力は、このような

D,seq,1876-1877,A,seq,3802-3803,135 
D,seq,13691-13694,A,seq,14117-14120,85 
+2

あなたの目的は完全には明確ではありません。そして、結果の最初の行は 'D、seq、1876-1877、A、seq、3802-3803,135'であってはなりませんか? –

+0

しきい値が5で、値が1,4,7の場合はどうなりますか?あなたは1と4をグループ化して、7だけを残しますか?または、4と1と7をグループ化しますか? – Fabich

+0

質問では**閾値**と**距離**の意味を理解していません...誰でも少し説明できますか?しきい値/何の距離? – Kent

答えて

0

何かのように見えるのでしょうか?そうですか

awk -v d=5 '{ 
    a[NR]=$3; 
    b[NR]=$6 
} 
(a[NR]-a[NR-1] > d || b[NR]-b[NR-1] > d){ 
    if(NR!=1){ 
     print "D seq",s"-"a[NR-1],"A seq",t"-"b[NR-1],c 
    }; 
    c=$NF; 
    s=$3; 
    t=$6; 
    next 
} 
{ 
    c+=$NF 
} 
END{ 
    print "D seq",s"-"a[NR],"A seq",t"-"b[NR],c' 
}' file.txt 

ここで、dには距離値があります。

+0

ありがとう@ 7171uあなたの助けになりました – unix124

関連する問題