Remover linhas com menos de 5 duplicadas

0

Eu tenho um dado parecido com isso, para cada SNP, ele deve repetir 5 vezes com beta diferente. Mas, para o SNP rs11704961, ele só é repetido duas vezes, portanto, desejo excluir as linhas do SNP que são repetidas menos de 5 vezes. Eu tentei usar sort -k 1 | uniq -c , mas considera a linha inteira para verificar duplicatas, não a primeira coluna.

SNP R K BETA 
rs767249 1 1 0.1065 
 rs767249 1 2 -0.007243 
 rs767249 1 3 0.02771 
 rs767249 1 4 -0.008233 
 rs767249 1 5 0.05073 
 rs11704961 2 1 0.2245 
 rs11704961 2 2 0.009203 
 rs1041894 3 1 0.1238 
 rs1041894 3 2 0.002522 
 rs1041894 3 3 0.01175
 rs1041894 3 4 -0.01122 
 rs1041894 3 5 -0.009195
    
por HelloFuture 12.11.2016 / 00:26

2 respostas

0

Usando awk :

$ cat snp.awk
NR == 1 { # header line
  print $0
}
NR > 1 { # data line
  snp = $1;
  retain[snp][NR] = $0;
  counts[snp]++;
}
END {
  for (snp in retain) {
    if (counts[snp] == 5) {
      for (i in retain[snp]) {
        print retain[snp][i];
      }
    }
  }
}

$ awk -f snp.awk snp.dat
SNP R K BETA
rs1041894 3 1 0.1238
rs1041894 3 2 0.002522
rs1041894 3 3 0.01175
rs1041894 3 4 -0.01122
rs1041894 3 5 -0.009195
rs767249 1 1 0.1065
rs767249 1 2 -0.007243
rs767249 1 3 0.02771
rs767249 1 4 -0.008233
rs767249 1 5 0.05073

mas observe que awk arrays não preservam a ordem de inserção, portanto, nesse caso, suas saídas não estão na mesma ordem em que estavam na entrada.

    
por 12.11.2016 / 15:05
0

Usando Miller que é awk , mas lida com as linhas de cabeçalho intrinsecamente:

$ cat snp.mlr
@records[$SNP][NR] = $*; # retain records
@counts[$SNP] += 1;

end { # conditionally emit
  for (snp in @records) {
    if (@counts[snp] == 5) {
      emit @records[snp];
    }
  }
}

$ mlr --csvlite --fs space put -q -f snp.mlr snp.dat
SNP R K BETA
rs767249 1 1 0.1065
rs767249 1 2 -0.007243
rs767249 1 3 0.02771
rs767249 1 4 -0.008233
rs767249 1 5 0.05073
rs1041894 3 1 0.1238
rs1041894 3 2 0.002522
rs1041894 3 3 0.01175
rs1041894 3 4 -0.01122
rs1041894 3 5 -0.009195

Observe que esse recurso usa novos recursos desde a última versão 4.5.0 .

    
por 12.11.2016 / 02:40