2016-11-28 5 views
1
Trio type1 Chr Pos Allele rsID Gene 
Sample11 type1 1 11105106 C/T rs2273345 MASP2 
Sample11 type1 1 31342388 A/C/* 1:31342388 SDC3 
Sample11 type1 1 33402334 GA/G-/++A rs36040674 RNF19B 
Sample11 type1 1 38078171 G/+GT/+GTGT rs139353088 RSPO1 
Sample11 type1 1 47074774 TCATGGTCTGATGGTCC/T----------------/ACATGGTCTGATGGTCC rs4275405 MOB3C 
Sample11 type1 1 50883804 CTT/C--/CT- 1:50883804 DMRTA2 
Sample11 type1 1 52947350 TA/++A/T- 1:52947350 ZCCHC11 
Sample11 type1 1 84956161 CT/C-/++T rs556742567 RPF1 
Sample11 type1 1 114940632 CAA/C--/CA- rs78184484 TRIM33 

Ich weiß, wie das Auftreten der Spalte rsID zählen. Hier ist der Befehl, den ich von @ glenn jackman lernen, die ich die Anzahl der rsID haben kann.Anzahl Vorkommen in einer Spalte zählen und die gesamte Zeile

awk '{count[$7]++} END {for (word in count) print word, count[word]}' Nofilter.txt 

Ich möchte die gesamte Zeile grep, die die RSID wiederkehrend ist.

grep if count[word]>3 

Wie soll ich den Befehl basierend auf dem aktuellen ändern?

+0

grep was? Möchten Sie Zeilen drucken, bei denen die Anzahl größer als eine Zahl ist? – karakfa

+0

Ja, vielleicht ist Grep keine gute Idee? @ Karakfa – user3631848

Antwort

0

Warum nicht nur eine Pipe an awk zu überprüfen, ob die Vorkommen größer als 3?

awk '{count[$7]++} END {for (word in count) print word, count[word]}' Nofilter.txt | awk '$2 > 3' 

Dies wird die Ausgabe überprüfen und Ihnen sagen, welche Linien Vorkommen über der gewählten Cutoff hatte.

+0

Vielen Dank für Ihre Antwort. Um jedoch die entsprechende Zeile in Nofile.txt zu erhalten, wenn $ 2> 3? – user3631848

2

Unter der Annahme:

  • Sie gaffen verwenden und
  • Out-of-Order-Ausgabe in Ordnung ist, und
  • Ihre Eingabe gestattet data.txt

Lösungen:

  • Da gawk 4.0.0:

    awk '{a[$7]++;b[$7][c++]=$0}END{for(x in a)if(a[x]>3)for(y in b[x])print(b[x][y])}' data.txt 
    
  • Vor gaffen 4.0.0:

    awk '($7 in a){b[$7]=ORS}{c[$7]++;a[$7]=a[$7] b[$7] $0}END{for(x in c)if(c[x]>2)print(a[x])}' data.txt 
    
+0

Es scheint, dass es einige Syntaxfehler gibt. @Cyker – user3631848

+0

@ user3631848 Ahhhhh müssen Sie Ihre Eingabedatei anhängen. – Cyker

+0

Ich weiß, aber immer noch nicht die Ausgabe zu replizieren. Hier ist der Link von data.txt. Könnten Sie bitte nachsehen? https: //www.dropbox.com/s/1oftxlmj0li8335/tmp.txt? dl = 0 – user3631848

0

wenn Ihr awk nicht Multi Dimension-Arrays unterstützt können Sie versuchen, diese

$ awk '{k=$7; c[k]++; a[k]=(k in a)?a[k] ORS $0:$0} 
    END{for(k in c) if(c[k]>3) print a[k]}' file 

Erläuterung

k=$7 Satz Schlüssel als Feld 7
c[k]++ Inkrementzähler für Schlüssel
a[k]=(k in a)?a[k] ORS $0:$0 append Zeilen mit Datensatztrennzeichen in zwischen (verbinden), besonderer Sorgfalt zum ersten Mal !(k in a), da a[k]=a[k] ORS $0 mit zusätzlichen Datensatztrenn starten .
END{... wenn fertig, alle befriedigenden Zustand drucken.

+0

Dies funktioniert. Könntest du bitte etwas erklären? Insbesondere ist dieser Teil "a [k] = (k in a)? A [k] ORS $ 0: $ 0" – user3631848

Verwandte Themen