2016-04-19 18 views
0

möchte Zahlen innerhalb benutzerdefinierter Entfernung in einer Spalte gruppieren und entsprechende Werte in einer anderen Spalte in einer Datei in bash summieren. Hier ist die BeispieldateiGruppennummern in einer Spalte und Summe in einer anderen Spalte in 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 

so, wenn der Benutzer den Abstand zu 5 fusionieren definieren würde dann eine Ausgabe wie

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

Ihr Ziel ist nicht ganz klar. Und sollte nicht die erste Zeile des Ergebnisses "D, seq, 1876-1877, A, seq, 3802-3803,135" sein? –

+0

Was passiert, wenn Sie einen Grenzwert von 5 und die Werte 1, 4, 7 haben? Bilden Sie die Gruppen 1 und 4 und lassen Sie 7 allein? Oder gruppierst du 4 mit 1 und 7? – Fabich

+0

Ich verstehe nicht die Bedeutung von ** Schwelle ** und ** Entfernung ** in der Frage ... kann jeder etwas erklären? Schwelle/Entfernung von was? – Kent

Antwort

0

So etwas wie dies aussehen würde probieren?

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 

Wo d der Abstand Wert hat.

+0

Danke @ 7171u für Ihre Hilfe – unix124

Verwandte Themen