Bash 如果第一列等于其他行,则选择列中的最大数字

Bash 如果第一列等于其他行,则选择列中的最大数字,bash,sorting,awk,numbers,multiple-columns,Bash,Sorting,Awk,Numbers,Multiple Columns,我想让程序读取第1列,如果数字重复,则查找第5列,该列的值更高 1_248637391 . C T 592.4 1_248637391 . C T 505.79 1_248637400 . C A 600.00 1_248756167 rs61732484 C G 1243.19 1_248756167 rs61732484 C G 2002.61 输出: 1_248637391 . C T 592.4 1_248637400

我想让程序读取第1列,如果数字重复,则查找第5列,该列的值更高

1_248637391 .   C   T   592.4
1_248637391 .   C   T   505.79
1_248637400 .   C   A   600.00
1_248756167 rs61732484  C   G   1243.19
1_248756167 rs61732484  C   G   2002.61
输出:

1_248637391 .   C   T   592.4
1_248637400 .   C   A   600.00
1_248756167 rs61732484  C   G   2002.61

我正在使用大数据集,如果有人知道如何通过bash解决它,那将是非常棒的!非常感谢你的关注

使用
sort
awk

sort -k1,1 -k5,5nr file | awk '!seen[$1]++'
sort
用于按第1列升序和第5列数字降序对文件进行排序
awk
只打印
第1列中每个值的第一个条目

输出:

1_248637391 .   C   T   592.4
1_248637400 .   C   A   600.00
1_248756167 rs61732484  C   G   2002.61

选择只是排序

$ sort -k5nr file | sort -u -k1,1

1_248637391 .   C   T   592.4
1_248637400 .   C   A   600.00
1_248756167 rs61732484  C   G   2002.61

根据第5个字段进行降序排序,根据第1个字段选择第一个元素(根据第一个排序最大,可能需要
-s
标志)

谢谢@Anubhava!你能给我更好地解释一下'的作用吗!看到[$1]+'?
!SEED[$1]+
使用一个数组
SEED
,其键为
$1
。当
$1
中不存在时,使用
++
将其递增为
1
,并打印行。当相同的
$1
出现在
中时,则
!查看[$1]
使条件失败,行不打印。