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

Я хочу прочитать файл (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 оценивается.

2 Solutions collect form web for “Получить данные строки для несоответствующих значений столбца”

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 
  • Как я могу группировать числа в файле
  • Скрипт для удаления определенных элементов span из файла HTML
  • Удалите текст из файла и сохраните, не открывая
  • Как ограничить MAX MIN длиной строки?
  • Вставить многострочную строку в другую строку
  • Как найти текст, скопировать его и вставить в следующую строку в файле?
  • grep точный блок строк (содержимое файла1) из файла2
  • Неоднократно извлекает каждую вторую и третью строки файла с 3-строчными блоками данных
  • строки в столбцы с awk
  • Оценить часть текстовой строки
  • Замените каждое нечетное или даже появление шаблона в файле
  • Linux и Unix - лучшая ОС в мире.