Como remover registros com base na frequência de interação de três vias usando o awk

2

Como remover registros quando a frequência de interação de três fatores dos fatores (V2 * V3 * V4) estiver abaixo de 5.

dados originais

ID V2 V3 V4
101 2012 5 1
101 2012 5 1
101 2012 5 1
101 2012 5 1
102 2010 12 2
102 2012 12 2
102 2012 12 2
102 2012 12 2
    
por Alula 27.01.2017 / 18:52

3 respostas

2

Como "V2" é superior a 2.000 e nenhuma outra coluna é inferior a 1, o produto dessas colunas sempre será maior que cinco, dados seus dados de amostra. No entanto:

awk '($2*$3*$4) > 5 { print } NR==1 { print }' /path/to/data
    
por 27.01.2017 / 19:26
0

Eu não sei a matemática para a frequência, mas eu gosto do awk! Aqui está um script que percorre todos os registros do seu arquivo de teste e executa multiplicações nos números, e compara-os para ver se eles são menores que 5. Se menos de 5, não imprima. Caso contrário, imprima.

#!/usr/bin/awk -f BEGIN { print "ID V2 V3 V4 = PRODUCT"; } { TOTAL = int($1 * $2 * $3); if(TOTAL < 5) { # Don't print } else { print $1,"",$2,"",$3,"=",TOTAL; } }

    
por 27.01.2017 / 19:25
0

Como o ID pode variar para os mesmos fatores, você pode ler o arquivo duas vezes - primeiro para contar quantas vezes tem V2_V3_V4 e novamente para verificar cada linha e imprimir apenas se a contagem da primeira passagem for maior igual ou igual a n (neste caso 5):

awk -vn=5 'NR==FNR{++z[$2"_"$3"_"$4];next};
FNR==1{print;next};z[$2"_"$3"_"$4]>=n' infile infile
    
por 27.01.2017 / 20:50

Tags