Получить данные строки для несоответствующих значений столбца

Я хочу прочитать файл (1600 строк) и получить строки, только столбцы имеют разные значения (sno1, sno2, sno3 и sno4 – не должны быть равными), и оно должно быть выше 50%. Пример вывода, приведенного ниже

input.txt (с разделителями табуляции)

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 

Здесь, в строках R4 и R6, все значения столбцов не равны друг другу, и все они выше 50%. Любая помощь в awk / sed / perl оценивается.

A perl-oneliner:

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

Это в основном означает:

 #!/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 } 

Это может сработать для вас (GNU sed):

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