Ich habe eine Frage bezüglich meiner zuvor erfolgreich beantwortete Frage here von @fedorgui.Statistik mit awk berechnen
Ich habe eine Tabelle:
pac1 xxx
pac1 yyy
pac1 zzz
pac2 xxx
pac2 uuu
pac3 zzz
pac3 uuu
pac4 zzz
Und ich brauche Ausgabe wie folgt zu berechnen:
pac1 xxx 2/4
pac1 yyy 1/4
pac1 zzz 3/4
pac2 xxx 2/4
pac2 uuu 2/4
pac3 zzz 2/4
pac3 uuu 2/4
pac4 zzz 3/4
Wo erste Zahl ist einzigartig Vorkommen in der zweiten Spalte/einzigartige Vorkommen in der ersten Spalte (in diesem Fall xxx tritt 2 in Spalte zwei und uniq Spalte eins ist 4 => 2/4
Lösung funktioniert in Awk ist hier:
$ awk 'FNR==NR {col1[$1]++; col2[$2]++; next} {print $0, col2[$2] "/" length(col1)}' file file
Aber meine Eingabezeilen dupliziert haben könnte wie:
pac1 xxx
pac1 xxx
pac1 xxx
pac1 yyy
pac1 zzz
pac2 xxx
pac2 xxx
pac2 xxx
pac2 uuu
pac3 zzz
pac3 uuu
pac4 zzz
pac4 zzz
Und ich brauche die gleichen Berechnungen zu tun, sondern nur für uniq Zeilen und fügen diese Statistik zu allen Zeilen wie (nicht Vervielfältigungen Zeilen berechnen) :
pac1 xxx 2/4
pac1 xxx 2/4
pac1 xxx 2/4
pac1 yyy 1/4
pac1 zzz 3/4
pac2 xxx 2/4
pac2 xxx 2/4
pac2 xxx 2/4
pac2 uuu 2/4
pac3 zzz 2/4
pac3 uuu 2/4
pac4 zzz 3/4
pac4 zzz 3/4
Dies ist komplizierter Ich habe Tausende von Zeilen. Danke für jede Idee.
Zahlen und Berechnung sind die gleichen wie Beispiel 1 - ich Berechnung tun müssen, wie : uniq
Geroge
probiere 'FNR == NR {if (! Gesehen [$ 0] ++) {col1 [$ 1] ++; col2 [$ 2] ++;} next} '(aber du musst extra Leerzeichen am Zeilenende entfernen) ... sonst probier 'if (! seen [$ 1 $ 2] ++)' – Sundeep
Das habe ich versucht, aber Problem ist, dass dies ein Teil der Datei ist - ich habe viel mehr Spalten, die nicht eindeutig sind, also muss ich uniq nur für diese zwei Spalten überprüfen. – Geroge