Chr start stop superfamily TE pres/abs 88 108 139 159 265 350 351 403 410 424 428 430 506 544 546 6
1 8667 8700 MuDR ATDNAI27T9A presence NA 0 0 0 0 0 0 0 0 0 0 NA 0 0 0 0
1 10585 10600 Gypsy ATHILA6A presence NA 0 0 0 0 NA 0 0 0 0 0 0 0 0 0 0
1 15091 15099 Copia ATCOPIA13 presence 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 15894 15898 Gypsy ATGP1 presence 0 0 NA 0 NA 0 0 0 0 0 1 0 0 0 0 NA 1
1 20514 20532 MuDR VANDAL8 presence NA 0 NA NA NA NA NA 1 0 NA NA NA 0 0 0 NA NA
1 20530 20537 Gypsy ATGP1 presence NA 0 0 NA NA NA NA 1 0 NA NA NA 0 0 0 NA NA
Folgendes habe ich versucht, die Häufigkeit von '0' und '1' zu ermitteln.
cat file.bed|awk '{if(NR>1){for (i = 1; i <= NF; i++) if($i==0)print}}'|awk '{count=0;if(NR==1){print $0"\tcount"}else{for (i=8; i<=NF; i++){if ($i==1){count++}}print $0"\t"count}}' > x
Mein Code gibt nicht die richtige Ausgabe aus
Wie kann ich meinen Code korrigieren, sodass am Ende meiner Ausgabedatei drei Spalten hinzugefügt werden, die mir die Anzahl 0, 1 und NA liefern?
0, NA und 1 müssen ab der zweiten Zeile gezählt werden. In den Spalten 0, NA und 1 müssen ab der siebten Spalte gezählt werden
Gewünschte Ausgabe:
Chr start stop superfamily TE pres/abs 88 108 139 159 265 350 351 403 410 424 428 430 506 544 546 6 count0 count1 countNA freq0 freq1 freqNA
1 8667 8700 MuDR ATDNAI27T9A presence NA 0 0 0 0 0 0 0 0 0 0 NA 0 0 0 0 14 0 2 0.87 0 0.12
Antwort1
awk 'BEGIN{ FS=OFS="\t" }
NR==1 { print $0, "0s", "1s", "NAs" }
NR>1 { for(i=7; i<=NF; i++) { NAs+=$i=="NA"; ones+=$i==1; total++ };
print $0, total-ones-NAs, ones, NAs; NAs=ones=total=0;
}' infile >outfile
NAs
Variable zählt das Vorkommen von „NA“.
ones
Variable zählt das Vorkommen von „1“.
total
Zählt die insgesamt besuchten Felder vom siebten bis letzten Feld (dies könnte entfernt werden, aber ich habe der Übersichtlichkeit halber * verwendet ).
total-ones-NAs
Ist die Anzahl der „0“ (durch Subtraktion von Einsen und NAs von der Gesamtzahl).
NAs=ones=total=0
Setzt die Variablen für die nächste Zeile zurück.
*: wir könnten es entfernen total++
und total-ones-NAs
durch ersetzen NF-6-ones-NAs
.