我正在尝试根据另一列中的变量/字段选择列中的顶部值。它是一个非常大的制表符分隔文件。
输入:
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 :(得分: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