我需要一些文字操作方面的帮助 我确实有这样的数据:
29554 31109“ENSG00000243485.1”1555
29554 31097“ENSG00000243485.1”1543
29554 30039“ENSG00000243485.1”485
30564 30667“ENSG00000243485.1”103
30267 30667“ENSG00000243485.1”400
30976 31109“ENSG00000243485.1”133
89295 133566“ENSG00000238009.2”44271
89295 120932“ENSG00000238009.2”31637
120775 120932“ENSG00000238009.2”157
112700 112804“ENSG00000238009.2”104
92091 92240“ENSG00000238009.2”149
28269867 28269929“ENSG00000248451.1”62
28270383 28270486“ENSG00000248451.1”103
28273195 28273372“ENSG00000248451.1”177
28275308 28275354“ENSG00000248451.1”46
.....................
我必须打印每组最大值的线
第4列中有组名,值列在第5列
我想它应该是这样的:
1.将小组彼此分开;
2.选择最大值;
3.打印整条线。
示例的首选输出应为:
29554 31109“ENSG00000243485.1”1555
89295 133566“ENSG00000238009.2”44271
28273195 28273372“ENSG00000248451.1”177
希望有人可以用awk或sed帮助我。
答案 0 :(得分:2)
您只需要使用awk传递文件一次:
awk '
$4 > val[$3] {val[$3] = $4; line[$3] = $0}
END {for (grp in line) print line[grp]}
' filename
答案 1 :(得分:1)
这应该在bash
和awk
:
GROUPS=$(cut -d' ' -f3 datafile | uniq) # list of groups
for f in "$GROUPS"
do
# print line if 4th field is max
awk -v "grp=$f" '$0 ~ grp && $4 > max {max=$4; line=$0} END {print line}' datafile
done