Obtém dados de linha para valores de coluna não correspondentes

2

Eu quero ler o arquivo (1600 linhas) e obter linhas apenas as colunas têm valores diferentes (sno1, sno2, sno3 & sno4-não deve ser igual) e deve estar acima 50% .O exemplo de saída dado abaixo

input.txt (delimitado por tabulação)

id sno1 sno2 sno3 sno4
R1 98.4 88.8 98.4 67.6
R2 100  100  100  100
R3 33.4 23.5 98.8 45.5
R4 53.5 78.7 88.8 67.5
R5 0    0    0    0
R6 88.8 98.8 67.6 100

ouput.txt

R4 53.5 78.7 88.8 67.5
R6 88.8 98.8 67.6 100

Aqui no R4 & R6 linhas - todos os valores da coluna não são iguais entre si e todos estão acima de 50%. Qualquer ajuda em awk / sed / perl é apreciada.

    
por jack 06.08.2012 / 23:52

2 respostas

3

Um perl-oneliner:

perl -nae 'undef %saw ; next if $. == 1; shift @F; next if grep { $_ < 50 or $saw{$_}++ } @F;  print ' input.txt

Isso basicamente se traduz em:

#!/usr/bin/env perl
use strict;

while (<>) {
  my @F = split(' ');  # split the current line
  my %seen;
  next if $. == 1;  # skip the heading
  shift @F;  # ignore first element

  next if grep { $_ < 50 or $seen{$_}++ } @F;  # ignore lines with
                                               # duplicate entries and
                                               # entries less than 50
  print;  # print current line
}
    
por 07.08.2012 / 00:35
2

Isso pode funcionar para você (GNU sed):

sed '1d;/\S\+ \(\S\+\) .* /d;/\S\+ \S\+ \(\S\+\) .* /d;/\S\+ \S\+ \S\+ \(\S\+\) .* /d;/\S\+\( \(100\|[56789][0-9]\..\)\)\{4\}/!d' file
    
por 07.08.2012 / 21:59

Tags