cuente e imprima la frecuencia de '0', '1' y 'NA' en cada fila después de la fila del encabezado

cuente e imprima la frecuencia de '0', '1' y 'NA' en cada fila después de la fila del encabezado
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

Lo siguiente es lo que intenté obtener para obtener la frecuencia de '0' y '1'.

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

Mi código no me da el resultado correcto

¿Cómo puedo corregir mi código para agregar tres columnas al final de mi archivo de salida, lo que me da el recuento de 0, 1 y NA?

0, NA y 1 deben contarse desde la segunda fila en adelante. En las columnas 0, NA y 1 deben contarse desde la séptima columna en adelante

Salida deseada:

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

Respuesta1

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

NAsLa variable cuenta las apariciones de "NA".
onesLa variable cuenta las apariciones de los "1".
totalcuenta el total de campos visitados desde el séptimo y último campo (esto podría eliminarse, pero lo usé para mayor claridad * ).
total-ones-NAses el recuento de "0" (restando los unos y los NA del total). NAs=ones=total=0restablece las variables para la siguiente línea.


*: podríamos eliminar total++y reemplazar total-ones-NAscon NF-6-ones-NAs.

información relacionada