chr1,A,1,3,y,-
chr1,A,2,30,y,-
chr1,A,12,40,y,-
chr2,B,0,3,y,-
chr2,B,1,30,y,-
chr3,C,1,3,y,-
我想使用bash按照第二列进行分组,然后从第三列取最小值,从第四列取最大值。所以期望的输出应该是:
chr1,A,1,40,y,-
chr2,B,0,30,y,-
chr3,C,1,3,y,-
我成功地构建了一个简陋的代码来实现它,但它并没有完全生成最终的输出。
以下是代码:
awk 'BEGIN{FS=OFS=","} {if (!( $2 in min )) { min[$2] = $3; max[$2] = $4; row[$2] = $0 } else { if ($3 < min[$2]) min[$2] = $3; if ($4 > max[$2]) max[$2] = $4; row[$2] = $0 } } END { for (key in row) print row[key] }'
而我使用这段代码得到的最终输出是:
chr1,A,2,30,y,-
chr2,B,1,30,y,-
chr3,C,1,3,y,-
如何获得我想要的输出?有没有更简单的bash代码可以实现这个功能?谢谢。