2015-01-29 4 views
-1

Я пытаюсь выбрать верхние значения в столбце на основе переменной/поля в другом столбце. это очень большой файл с разделителями табуляции.выберите верхние значения в столбце на основе имени переменной в другом столбце

Вход:

Names col2 col3 col4 
A A1 def 10 
A A1 BBB 10 
A A1 CED 10 
A A1 fff 7.5 
B B1 def 7.5 
B B1 dff 5.5 
B B1 fff 4.5 
C C1 ggg 6.5 
C C3 iii 6.5 
C C2 hhh 5.0 
C C4 toi 6.5 
D D1 xyz 10.0 
D D2 ikj 7.5 
D D3 abc 7.5 
... 

Выход

Names col2 col3 col4 
A A1 def 10 
A A1 BBB 10 
A A1 CED 10 
B B1 def 7.5 
C C1 ggg 6.5 
C C3 iii 6.5 
C C4 toi 6.5 
D D1 xyz 10.0 

В принципе, я хочу, чтобы все строки со значениями 10 и верхних значений для каждого из имен в column1. Любые входы для решения этой проблемы perl, awk или sed хорошо оценены.
Спасибо.

+0

Привет, добро пожаловать к переполнению стека! Мы предпочитаем, если вы попытаетесь найти решение, прежде чем спрашивать здесь. Можете ли вы показать нам, что вы пробовали? – Schwern

+0

Я начинаю с биоинформатикой. Я пробовал использовать perl с while loop и If $ _ [3]> "10". Я остановился там, так как не знал, как выбирать на основе верхнего значения для каждого имени. – RKP

+1

Вы должны показать нам код, и мы сможем помочь с этим. – Schwern

ответ

0

Я попытался следующий код, который работал и выборки результат

#!/bin/sh 

for col1 in `grep -v "Names" <filename> |awk '{print $1}'|sort|uniq`; 
do 
    maxVal=$(awk -v x=$col1 '$1 == x {print $4}' <filename> |sort|uniq|head -1); 
    awk -v names=$col1 -v max=$maxVal '$1 == names && $4 == max {print $0 }' <filename> 
done 

Это дают результаты, как ниже

A A1 def 10 
A A1 BBB 10 
A A1 CED 10 
B B1 fff 4.5 
C C2 hhh 5.0 
Смежные вопросы