Bash 如果第一列等于其他行,则选择列中的最大数字
我想让程序读取第1列,如果数字重复,则查找第5列,该列的值更高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_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]
使条件失败,行不打印。